<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://linux-kvm.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Luizcapitulino</id>
	<title>KVM - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://linux-kvm.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Luizcapitulino"/>
	<link rel="alternate" type="text/html" href="https://linux-kvm.org/page/Special:Contributions/Luizcapitulino"/>
	<updated>2026-04-21T16:33:42Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.5</generator>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=3232</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=3232"/>
		<updated>2010-09-09T13:51:58Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PAGE MOVED!! =&lt;br /&gt;
&lt;br /&gt;
This page has moved to: http://wiki.qemu.org/QMP&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=3100</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=3100"/>
		<updated>2010-07-22T16:41:55Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) is a [http://www.json.org/ JSON]-based protocol which allows applications to communicate with QEMU&#039;s Monitor the right way.&lt;br /&gt;
&lt;br /&gt;
QMP&#039;s main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous messages support (ie. events)&lt;br /&gt;
* Capabilities Negotiation&lt;br /&gt;
&lt;br /&gt;
However, QMP is still under heavy development and &#039;&#039;&#039;is considered an unstable protocol&#039;&#039;&#039;. Please, check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file for more information.&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU since version 0.12. It&#039;s already functional and contains a number of commands available, however early adopters will have to cope with protocol changes between QEMU releases.&lt;br /&gt;
&lt;br /&gt;
For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: { &amp;quot;QMP&amp;quot;: { &amp;quot;version&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot; }, &amp;quot;capabilities&amp;quot;: [] } }&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: { &amp;quot;return&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;} }&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {}}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Main developers are [mailto:lcapitulino@redhat.com Luiz Capitulino] and [mailto:armbru@redhat.com Markus Armbruster], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
=== High Priority ===&lt;br /&gt;
&lt;br /&gt;
* do_device_add()/do_device_del() conversions (markus)&lt;br /&gt;
* do_netdev_add()/do_netdev_del() conversions (markus)&lt;br /&gt;
* do_blockdev_add()/do_blockdev_del() conversions (markus)&lt;br /&gt;
* Events Grouping (luiz)&lt;br /&gt;
* Make qmp-shell work again (luiz)&lt;br /&gt;
&lt;br /&gt;
* Self-description &amp;amp; High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
&lt;br /&gt;
=== Normal Priority ===&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands to the QObject API&lt;br /&gt;
* Improve internal API, currently it&#039;s too [http://lists.gnu.org/archive/html/qemu-devel/2009-12/msg02537.html low-level]&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Unfortunately, there is no automated tool to test QMP correctness yet. Probably, the right thing to do is to integrate with [http://www.linux-kvm.org/page/KVM-Autotest kvm-autotest] but we still have to think how this should be done.&lt;br /&gt;
&lt;br /&gt;
Meanwhile, QMP testing is a low-level procedure which requires knowledge about the protocol and its implementation, so the first thing to do is to read the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] and [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt spec] files.&lt;br /&gt;
&lt;br /&gt;
This section describes three ways of testing QMP:&lt;br /&gt;
&lt;br /&gt;
* By hand (difficult, only worth it if you&#039;re chasing a specific bug)&lt;br /&gt;
* qmp-shell script (automates part of the job)&lt;br /&gt;
* Libvirt integration (assumes familiarity with libvirt)&lt;br /&gt;
&lt;br /&gt;
=== By hand ===&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a TCP socket, so that telnet can be used&lt;br /&gt;
&lt;br /&gt;
 # qemu [...] -qmp tcp:localhost:4444,server&lt;br /&gt;
&lt;br /&gt;
2. Now, run telnet&lt;br /&gt;
&lt;br /&gt;
 $ telnet localhost 4444&lt;br /&gt;
&lt;br /&gt;
3. You should see the following prompt&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
4. Now you can issue commands. For example, to get a list of QMP supported commands, run &#039;&#039;query-commands&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 { &amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (1):&#039;&#039;&#039; all &amp;quot;info&amp;quot; commands are available under QMP as &amp;quot;query-&amp;quot;, for example &amp;quot;info vnc&amp;quot; is &amp;quot;query-vnc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (2):&#039;&#039;&#039; QMP doesn&#039;t have user documentation yet, this means that, to find out which arguments a command accepts or what&#039;s its output, you will have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
=== qmp-shell script ===&lt;br /&gt;
&lt;br /&gt;
This script is available under the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP QMP] directory in QEMU&#039;s source-tree. It automates a bit the testing work, as it can construct commands.&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a unix socket, like:&lt;br /&gt;
&lt;br /&gt;
 # qemu [...] -qmp unix:./qmp-sock,server&lt;br /&gt;
&lt;br /&gt;
2. Run the script&lt;br /&gt;
&lt;br /&gt;
 # qmp-shell ./qmp-sock&lt;br /&gt;
&lt;br /&gt;
3. You should get the following prompt&lt;br /&gt;
&lt;br /&gt;
 (QEMU)&lt;br /&gt;
&lt;br /&gt;
4. Now you can run commands. For example, let&#039;s change the VNC password:&lt;br /&gt;
&lt;br /&gt;
 (QEMU) change device=vnc target=password arg=&#039;1234&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: To find out what arguments a command accepts, you have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
=== Libvirt ===&lt;br /&gt;
&lt;br /&gt;
Libvirt already has QMP support, but it&#039;s currently disable. This test procedure explains how to enable it and put libvirt to run on top of QMP.&lt;br /&gt;
&lt;br /&gt;
1. Install [http://lloyd.github.com/yajl yajl-devel] (If you&#039;re running Fedora 12 or above just do &#039;yum install yajl-devel&#039;)&lt;br /&gt;
&lt;br /&gt;
2. From a fresh checkout of [http://libvirt.org/git/?p=libvirt.git;a=summary libvirt master branch] run the following:&lt;br /&gt;
&lt;br /&gt;
 ./autogen.sh --system --enable-compile-warnings=error&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (1):&#039;&#039;&#039; The &#039;--system&#039; flag is a shortcut for compiling with the --prefix and other directories matching a system RPM build.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (2):&#039;&#039;&#039; Make sure the final summary of autogen.sh tells you that it found the yajl library&lt;br /&gt;
&lt;br /&gt;
3. To enable QMP support, edit &#039;&#039;&#039;src/qemu/qemu_conf.c&#039;&#039;&#039; and find:&lt;br /&gt;
&lt;br /&gt;
 #if 0&lt;br /&gt;
    if (version &amp;gt;= 13000)&lt;br /&gt;
        flags |= QEMUD_CMD_FLAG_MONITOR_JSON;&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Change to &#039;#if 1&#039;, and change the version to 12000 so it detects your GIT build of QEMU&lt;br /&gt;
&lt;br /&gt;
4. Run &#039;make&#039; to build. There is no need to &#039;make install&#039; anything&lt;br /&gt;
especially since that would overwrite your RPM based install&lt;br /&gt;
&lt;br /&gt;
5. As root simply stop the current daemon &amp;amp; start the one you built&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/libvirtd stop&lt;br /&gt;
 $HOME/your/git/checkout/of/libvirt/daemon/libvirtd&lt;br /&gt;
&lt;br /&gt;
6. As root you can use the newly built virsh too&lt;br /&gt;
&lt;br /&gt;
 cd $HOME/your/git/checkout/of/libvirt/src&lt;br /&gt;
 ./virsh &amp;lt;BLAH&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with &amp;lt;span style=&amp;quot;background-color:yellow&amp;quot;&amp;gt;yellow&amp;lt;/span&amp;gt;.  Handlers it is expected to use are marked &amp;lt;span style=&amp;quot;background-color:khaki&amp;quot;&amp;gt;khaki&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_block_set_passwd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set_nr()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|qemu-kvm only&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:khaki;&amp;quot;&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:khaki;&amp;quot;&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:khaki;&amp;quot;&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_add()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_del()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:khaki;&amp;quot;&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:khaki;&amp;quot;&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:khaki;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use blockdev_add, device_add instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_add() instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_del() instead&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_add, blockdev_add instead&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_commands()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:khaki;&amp;quot;&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use do_info_netdev()&lt;br /&gt;
|- style=&amp;quot;background-color:khaki;&amp;quot;&lt;br /&gt;
|do_info_netdev()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|[http://wiki.qemu.org/Google_Summer_of_Code_2010/QMP Being worked on in SoC]&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:khaki;&amp;quot; &lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:khaki;&amp;quot;&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|lacks parent info, libvirt wants it&lt;br /&gt;
|- style=&amp;quot;background-color:khaki;&amp;quot;&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_pci_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|libvirt uses this, but only with pre-0.12.x QEMU&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=3099</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=3099"/>
		<updated>2010-07-22T16:39:05Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) is a [http://www.json.org/ JSON]-based protocol which allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP&#039;s main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous messages support (ie. events)&lt;br /&gt;
* Capabilities Negotiation&lt;br /&gt;
&lt;br /&gt;
However, QMP is still under heavy development and is &#039;&#039;&#039;considered an unstable protocol&#039;&#039;&#039;. Please, check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file for more information.&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU since version 0.12. It&#039;s already functional and contains a number of commands available, however early adopters will have to cope with protocol changes between QEMU releases.&lt;br /&gt;
&lt;br /&gt;
For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: { &amp;quot;QMP&amp;quot;: { &amp;quot;version&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot; }, &amp;quot;capabilities&amp;quot;: [] } }&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: { &amp;quot;return&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;} }&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {}}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Main developers are [mailto:lcapitulino@redhat.com Luiz Capitulino] and [mailto:armbru@redhat.com Markus Armbruster], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
=== High Priority ===&lt;br /&gt;
&lt;br /&gt;
* do_device_add()/do_device_del() conversions (markus)&lt;br /&gt;
* do_netdev_add()/do_netdev_del() conversions (markus)&lt;br /&gt;
* do_blockdev_add()/do_blockdev_del() conversions (markus)&lt;br /&gt;
* Events Grouping (luiz)&lt;br /&gt;
* Make qmp-shell work again (luiz)&lt;br /&gt;
&lt;br /&gt;
* Self-description &amp;amp; High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
&lt;br /&gt;
=== Normal Priority ===&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands to the QObject API&lt;br /&gt;
* Improve internal API, currently it&#039;s too [http://lists.gnu.org/archive/html/qemu-devel/2009-12/msg02537.html low-level]&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Unfortunately, there is no automated tool to test QMP correctness yet. Probably, the right thing to do is to integrate with [http://www.linux-kvm.org/page/KVM-Autotest kvm-autotest] but we still have to think how this should be done.&lt;br /&gt;
&lt;br /&gt;
Meanwhile, QMP testing is a low-level procedure which requires knowledge about the protocol and its implementation, so the first thing to do is to read the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] and [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt spec] files.&lt;br /&gt;
&lt;br /&gt;
This section describes three ways of testing QMP:&lt;br /&gt;
&lt;br /&gt;
* By hand (difficult, only worth it if you&#039;re chasing a specific bug)&lt;br /&gt;
* qmp-shell script (automates part of the job)&lt;br /&gt;
* Libvirt integration (assumes familiarity with libvirt)&lt;br /&gt;
&lt;br /&gt;
=== By hand ===&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a TCP socket, so that telnet can be used&lt;br /&gt;
&lt;br /&gt;
 # qemu [...] -qmp tcp:localhost:4444,server&lt;br /&gt;
&lt;br /&gt;
2. Now, run telnet&lt;br /&gt;
&lt;br /&gt;
 $ telnet localhost 4444&lt;br /&gt;
&lt;br /&gt;
3. You should see the following prompt&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
4. Now you can issue commands. For example, to get a list of QMP supported commands, run &#039;&#039;query-commands&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 { &amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (1):&#039;&#039;&#039; all &amp;quot;info&amp;quot; commands are available under QMP as &amp;quot;query-&amp;quot;, for example &amp;quot;info vnc&amp;quot; is &amp;quot;query-vnc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (2):&#039;&#039;&#039; QMP doesn&#039;t have user documentation yet, this means that, to find out which arguments a command accepts or what&#039;s its output, you will have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
=== qmp-shell script ===&lt;br /&gt;
&lt;br /&gt;
This script is available under the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP QMP] directory in QEMU&#039;s source-tree. It automates a bit the testing work, as it can construct commands.&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a unix socket, like:&lt;br /&gt;
&lt;br /&gt;
 # qemu [...] -qmp unix:./qmp-sock,server&lt;br /&gt;
&lt;br /&gt;
2. Run the script&lt;br /&gt;
&lt;br /&gt;
 # qmp-shell ./qmp-sock&lt;br /&gt;
&lt;br /&gt;
3. You should get the following prompt&lt;br /&gt;
&lt;br /&gt;
 (QEMU)&lt;br /&gt;
&lt;br /&gt;
4. Now you can run commands. For example, let&#039;s change the VNC password:&lt;br /&gt;
&lt;br /&gt;
 (QEMU) change device=vnc target=password arg=&#039;1234&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: To find out what arguments a command accepts, you have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
=== Libvirt ===&lt;br /&gt;
&lt;br /&gt;
Libvirt already has QMP support, but it&#039;s currently disable. This test procedure explains how to enable it and put libvirt to run on top of QMP.&lt;br /&gt;
&lt;br /&gt;
1. Install [http://lloyd.github.com/yajl yajl-devel] (If you&#039;re running Fedora 12 or above just do &#039;yum install yajl-devel&#039;)&lt;br /&gt;
&lt;br /&gt;
2. From a fresh checkout of [http://libvirt.org/git/?p=libvirt.git;a=summary libvirt master branch] run the following:&lt;br /&gt;
&lt;br /&gt;
 ./autogen.sh --system --enable-compile-warnings=error&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (1):&#039;&#039;&#039; The &#039;--system&#039; flag is a shortcut for compiling with the --prefix and other directories matching a system RPM build.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (2):&#039;&#039;&#039; Make sure the final summary of autogen.sh tells you that it found the yajl library&lt;br /&gt;
&lt;br /&gt;
3. To enable QMP support, edit &#039;&#039;&#039;src/qemu/qemu_conf.c&#039;&#039;&#039; and find:&lt;br /&gt;
&lt;br /&gt;
 #if 0&lt;br /&gt;
    if (version &amp;gt;= 13000)&lt;br /&gt;
        flags |= QEMUD_CMD_FLAG_MONITOR_JSON;&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Change to &#039;#if 1&#039;, and change the version to 12000 so it detects your GIT build of QEMU&lt;br /&gt;
&lt;br /&gt;
4. Run &#039;make&#039; to build. There is no need to &#039;make install&#039; anything&lt;br /&gt;
especially since that would overwrite your RPM based install&lt;br /&gt;
&lt;br /&gt;
5. As root simply stop the current daemon &amp;amp; start the one you built&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/libvirtd stop&lt;br /&gt;
 $HOME/your/git/checkout/of/libvirt/daemon/libvirtd&lt;br /&gt;
&lt;br /&gt;
6. As root you can use the newly built virsh too&lt;br /&gt;
&lt;br /&gt;
 cd $HOME/your/git/checkout/of/libvirt/src&lt;br /&gt;
 ./virsh &amp;lt;BLAH&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with &amp;lt;span style=&amp;quot;background-color:yellow&amp;quot;&amp;gt;yellow&amp;lt;/span&amp;gt;.  Handlers it is expected to use are marked &amp;lt;span style=&amp;quot;background-color:khaki&amp;quot;&amp;gt;khaki&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_block_set_passwd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set_nr()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|qemu-kvm only&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:khaki;&amp;quot;&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:khaki;&amp;quot;&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:khaki;&amp;quot;&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_add()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_del()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:khaki;&amp;quot;&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:khaki;&amp;quot;&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:khaki;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use blockdev_add, device_add instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_add() instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_del() instead&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_add, blockdev_add instead&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_commands()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:khaki;&amp;quot;&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use do_info_netdev()&lt;br /&gt;
|- style=&amp;quot;background-color:khaki;&amp;quot;&lt;br /&gt;
|do_info_netdev()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|[http://wiki.qemu.org/Google_Summer_of_Code_2010/QMP Being worked on in SoC]&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:khaki;&amp;quot; &lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:khaki;&amp;quot;&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|lacks parent info, libvirt wants it&lt;br /&gt;
|- style=&amp;quot;background-color:khaki;&amp;quot;&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_pci_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|libvirt uses this, but only with pre-0.12.x QEMU&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2943</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2943"/>
		<updated>2010-04-04T22:24:34Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) is a [http://www.json.org/ JSON]-based protocol which allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP&#039;s main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous messages support (ie. events)&lt;br /&gt;
* Capabilities Negotiation&lt;br /&gt;
* Stable API (starting with QEMU version 0.13)&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file has a simple introduction and the  [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt full specification] is recommended for application writers.&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12. This means that QMP is still under development and there &#039;&#039;&#039;will&#039;&#039;&#039; be incompatible changes between QEMU 0.12 and QEMU 0.13.&lt;br /&gt;
&lt;br /&gt;
For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: { &amp;quot;QMP&amp;quot;: { &amp;quot;version&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot; }, &amp;quot;capabilities&amp;quot;: [] } }&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: { &amp;quot;return&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;} }&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {}}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Main developers are [mailto:lcapitulino@redhat.com Luiz Capitulino] and [mailto:armbru@redhat.com Markus Armbruster], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
=== High Priority ===&lt;br /&gt;
&lt;br /&gt;
* do_device_add()/do_device_del() conversions (markus)&lt;br /&gt;
* do_netdev_add()/do_netdev_del() conversions (markus)&lt;br /&gt;
* do_blockdev_add()/do_blockdev_del() conversions (markus)&lt;br /&gt;
* Events Grouping (luiz)&lt;br /&gt;
* Make qmp-shell work again (luiz)&lt;br /&gt;
&lt;br /&gt;
* Self-description &amp;amp; High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
&lt;br /&gt;
=== Normal Priority ===&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands to the QObject API&lt;br /&gt;
* Improve internal API, currently it&#039;s too [http://lists.gnu.org/archive/html/qemu-devel/2009-12/msg02537.html low-level]&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Unfortunately, there is no automated tool to test QMP correctness yet. Probably, the right thing to do is to integrate with [http://www.linux-kvm.org/page/KVM-Autotest kvm-autotest] but we still have to think how this should be done.&lt;br /&gt;
&lt;br /&gt;
Meanwhile, QMP testing is a low-level procedure which requires knowledge about the protocol and its implementation, so the first thing to do is to read the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] and [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt spec] files.&lt;br /&gt;
&lt;br /&gt;
This section describes three ways of testing QMP:&lt;br /&gt;
&lt;br /&gt;
* By hand (difficult, only worth it if you&#039;re chasing a specific bug)&lt;br /&gt;
* qmp-shell script (automates part of the job)&lt;br /&gt;
* Libvirt integration (assumes familiarity with libvirt)&lt;br /&gt;
&lt;br /&gt;
=== By hand ===&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a TCP socket, so that telnet can be used&lt;br /&gt;
&lt;br /&gt;
 # qemu [...] -qmp tcp:localhost:4444,server&lt;br /&gt;
&lt;br /&gt;
2. Now, run telnet&lt;br /&gt;
&lt;br /&gt;
 $ telnet localhost 4444&lt;br /&gt;
&lt;br /&gt;
3. You should see the following prompt&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
4. Now you can issue commands. For example, to get a list of QMP supported commands, run &#039;&#039;query-commands&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 { &amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (1):&#039;&#039;&#039; all &amp;quot;info&amp;quot; commands are available under QMP as &amp;quot;query-&amp;quot;, for example &amp;quot;info vnc&amp;quot; is &amp;quot;query-vnc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (2):&#039;&#039;&#039; QMP doesn&#039;t have user documentation yet, this means that, to find out which arguments a command accepts or what&#039;s its output, you will have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
=== qmp-shell script ===&lt;br /&gt;
&lt;br /&gt;
This script is available under the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP QMP] directory in QEMU&#039;s source-tree. It automates a bit the testing work, as it can construct commands.&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a unix socket, like:&lt;br /&gt;
&lt;br /&gt;
 # qemu [...] -qmp unix:./qmp-sock,server&lt;br /&gt;
&lt;br /&gt;
2. Run the script&lt;br /&gt;
&lt;br /&gt;
 # qmp-shell ./qmp-sock&lt;br /&gt;
&lt;br /&gt;
3. You should get the following prompt&lt;br /&gt;
&lt;br /&gt;
 (QEMU)&lt;br /&gt;
&lt;br /&gt;
4. Now you can run commands. For example, let&#039;s change the VNC password:&lt;br /&gt;
&lt;br /&gt;
 (QEMU) change device=vnc target=password arg=&#039;1234&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: To find out what arguments a command accepts, you have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
=== Libvirt ===&lt;br /&gt;
&lt;br /&gt;
Libvirt already has QMP support, but it&#039;s currently disable. This test procedure explains how to enable it and put libvirt to run on top of QMP.&lt;br /&gt;
&lt;br /&gt;
1. Install [http://lloyd.github.com/yajl yajl-devel] (If you&#039;re running Fedora 12 or above just do &#039;yum install yajl-devel&#039;)&lt;br /&gt;
&lt;br /&gt;
2. From a fresh checkout of [http://libvirt.org/git/?p=libvirt.git;a=summary libvirt master branch] run the following:&lt;br /&gt;
&lt;br /&gt;
 ./autogen.sh --system --enable-compile-warnings=error&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (1):&#039;&#039;&#039; The &#039;--system&#039; flag is a shortcut for compiling with the --prefix and other directories matching a system RPM build.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (2):&#039;&#039;&#039; Make sure the final summary of autogen.sh tells you that it found the yajl library&lt;br /&gt;
&lt;br /&gt;
3. To enable QMP support, edit &#039;&#039;&#039;src/qemu/qemu_conf.c&#039;&#039;&#039; and find:&lt;br /&gt;
&lt;br /&gt;
 #if 0&lt;br /&gt;
    if (version &amp;gt;= 13000)&lt;br /&gt;
        flags |= QEMUD_CMD_FLAG_MONITOR_JSON;&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Change to &#039;#if 1&#039;, and change the version to 12000 so it detects your GIT build of QEMU&lt;br /&gt;
&lt;br /&gt;
4. Run &#039;make&#039; to build. There is no need to &#039;make install&#039; anything&lt;br /&gt;
especially since that would overwrite your RPM based install&lt;br /&gt;
&lt;br /&gt;
5. As root simply stop the current daemon &amp;amp; start the one you built&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/libvirtd stop&lt;br /&gt;
 $HOME/your/git/checkout/of/libvirt/daemon/libvirtd&lt;br /&gt;
&lt;br /&gt;
6. As root you can use the newly built virsh too&lt;br /&gt;
&lt;br /&gt;
 cd $HOME/your/git/checkout/of/libvirt/src&lt;br /&gt;
 ./virsh &amp;lt;BLAH&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_block_set_passwd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_add() instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_del() instead&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2941</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2941"/>
		<updated>2010-04-04T00:27:36Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) is a [http://www.json.org/ JSON]-based protocol which allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP&#039;s main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous messages support (ie. events)&lt;br /&gt;
* Capabilities Negotiation&lt;br /&gt;
* Stable API (starting with QEMU version 0.13)&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file has a simple introduction and the  [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt full specification] is recommended for application writers.&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12. This means that QMP is still under development and there &#039;&#039;&#039;will&#039;&#039;&#039; be incompatible changes between QEMU 0.12 and QEMU 0.13.&lt;br /&gt;
&lt;br /&gt;
For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: { &amp;quot;QMP&amp;quot;: { &amp;quot;version&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot; }, &amp;quot;capabilities&amp;quot;: [] } }&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: { &amp;quot;return&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;} }&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {}}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Main developers are [mailto:lcapitulino@redhat.com Luiz Capitulino] and [mailto:armbru@redhat.com Markus Armbruster], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
=== High Priority ===&lt;br /&gt;
&lt;br /&gt;
* do_device_add()/do_device_del() conversions (markus)&lt;br /&gt;
* do_netdev_add()/do_netdev_del() conversions (markus)&lt;br /&gt;
* do_blockdev_add()/do_blockdev_del() conversions (markus)&lt;br /&gt;
* Events Grouping (luiz)&lt;br /&gt;
* Make qmp-shell work again (luiz)&lt;br /&gt;
&lt;br /&gt;
* Self-description &amp;amp; High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
&lt;br /&gt;
=== Normal Priority ===&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands to the QObject API&lt;br /&gt;
* Improve internal API, currently it&#039;s too [http://lists.gnu.org/archive/html/qemu-devel/2009-12/msg02537.html low-level]&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Unfortunately, there is no automated tool to test QMP correctness yet. Probably, the right thing to do is to integrate with [http://www.linux-kvm.org/page/KVM-Autotest kvm-autotest] but we still have to think how this should be done.&lt;br /&gt;
&lt;br /&gt;
Meanwhile, QMP testing is a low-level procedure which requires knowledge about the protocol and its implementation, so the first thing to do is to read the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] and [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt spec] files.&lt;br /&gt;
&lt;br /&gt;
This section describes two ways of testing QMP:&lt;br /&gt;
&lt;br /&gt;
* By hand (difficult, only worth it if you&#039;re chasing a specific bug)&lt;br /&gt;
* qmp-shell script (automates part of the job)&lt;br /&gt;
* Libvirt integration (assumes familiarity with libvirt)&lt;br /&gt;
&lt;br /&gt;
=== By hand ===&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a TCP socket, so that telnet can be used&lt;br /&gt;
&lt;br /&gt;
 # qemu [...] -qmp tcp:localhost:4444,server&lt;br /&gt;
&lt;br /&gt;
2. Now, run telnet&lt;br /&gt;
&lt;br /&gt;
 $ telnet localhost 4444&lt;br /&gt;
&lt;br /&gt;
3. You should see the following prompt&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
4. Now you can issue commands. For example, to get a list of QMP supported commands, run &#039;&#039;query-commands&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 { &amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (1):&#039;&#039;&#039; all &amp;quot;info&amp;quot; commands are available under QMP as &amp;quot;query-&amp;quot;, for example &amp;quot;info vnc&amp;quot; is &amp;quot;query-vnc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (2):&#039;&#039;&#039; QMP doesn&#039;t have user documentation yet, this means that, to find out which arguments a command accepts or what&#039;s its output, you will have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
=== qmp-shell script ===&lt;br /&gt;
&lt;br /&gt;
This script is available under the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP QMP] directory in QEMU&#039;s source-tree. It automates a bit the testing work, as it can construct commands.&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a unix socket, like:&lt;br /&gt;
&lt;br /&gt;
 # qemu [...] -qmp unix:./qmp-sock,server&lt;br /&gt;
&lt;br /&gt;
2. Run the script&lt;br /&gt;
&lt;br /&gt;
 # qmp-shell ./qmp-sock&lt;br /&gt;
&lt;br /&gt;
3. You should get the following prompt&lt;br /&gt;
&lt;br /&gt;
 (QEMU)&lt;br /&gt;
&lt;br /&gt;
4. Now you can run commands. For example, let&#039;s change the VNC password:&lt;br /&gt;
&lt;br /&gt;
 (QEMU) change device=vnc target=password arg=&#039;1234&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: To find out what arguments a command accepts, you have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
=== Libvirt ===&lt;br /&gt;
&lt;br /&gt;
Libvirt already has QMP support, but it&#039;s currently disable. This test procedure explains how to enable it and put libvirt to run on top of QMP.&lt;br /&gt;
&lt;br /&gt;
1. Install [http://lloyd.github.com/yajl yajl-devel] (If you&#039;re running Fedora 12 or above just do &#039;yum install yajl-devel&#039;)&lt;br /&gt;
&lt;br /&gt;
2. From a fresh checkout of [http://libvirt.org/git/?p=libvirt.git;a=summary libvirt master branch] run the following:&lt;br /&gt;
&lt;br /&gt;
 ./autogen.sh --system --enable-compile-warnings=error&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (1):&#039;&#039;&#039; The &#039;--system&#039; flag is a shortcut for compiling with the --prefix and other directories matching a system RPM build.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (2):&#039;&#039;&#039; Make sure the final summary of autogen.sh tells you that it found the yajl library&lt;br /&gt;
&lt;br /&gt;
3. To enable QMP support, edit &#039;&#039;&#039;src/qemu/qemu_conf.c&#039;&#039;&#039; and find:&lt;br /&gt;
&lt;br /&gt;
 #if 0&lt;br /&gt;
    if (version &amp;gt;= 13000)&lt;br /&gt;
        flags |= QEMUD_CMD_FLAG_MONITOR_JSON;&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Change to &#039;#if 1&#039;, and change the version to 12000 so it detects your GIT build of QEMU&lt;br /&gt;
&lt;br /&gt;
4. Run &#039;make&#039; to build. There is no need to &#039;make install&#039; anything&lt;br /&gt;
especially since that would overwrite your RPM based install&lt;br /&gt;
&lt;br /&gt;
5. As root simply stop the current daemon &amp;amp; start the one you built&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/libvirtd stop&lt;br /&gt;
 $HOME/your/git/checkout/of/libvirt/daemon/libvirtd&lt;br /&gt;
&lt;br /&gt;
6. As root you can use the newly built virsh too&lt;br /&gt;
&lt;br /&gt;
 cd $HOME/your/git/checkout/of/libvirt/src&lt;br /&gt;
 ./virsh &amp;lt;BLAH&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_block_set_passwd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_add() instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_del() instead&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2938</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2938"/>
		<updated>2010-03-29T19:09:02Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) is a [http://www.json.org/ JSON]-based protocol which allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP&#039;s main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous messages support (ie. events)&lt;br /&gt;
* Capabilities Negotiation&lt;br /&gt;
* Stability (starting with QEMU version 0.13)&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file has a simple introduction and the  [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt full specification] is recommended for application writers.&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12. This means that QMP is still under development and there &#039;&#039;&#039;will&#039;&#039;&#039; be incompatible changes between QEMU 0.12 and QEMU 0.13.&lt;br /&gt;
&lt;br /&gt;
For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: { &amp;quot;QMP&amp;quot;: { &amp;quot;version&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot; }, &amp;quot;capabilities&amp;quot;: [] } }&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: { &amp;quot;return&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;} }&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {}}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Main developers are [mailto:lcapitulino@redhat.com Luiz Capitulino] and [mailto:armbru@redhat.com Markus Armbruster], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
=== High Priority ===&lt;br /&gt;
&lt;br /&gt;
* do_device_add()/do_device_del() conversions (markus)&lt;br /&gt;
* do_netdev_add()/do_netdev_del() conversions (markus)&lt;br /&gt;
* do_blockdev_add()/do_blockdev_del() conversions (markus)&lt;br /&gt;
* Events Grouping (luiz)&lt;br /&gt;
* Make qmp-shell work again (luiz)&lt;br /&gt;
&lt;br /&gt;
* Self-description &amp;amp; High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
&lt;br /&gt;
=== Normal Priority ===&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands to the QObject API&lt;br /&gt;
* Improve internal API, currently it&#039;s too [http://lists.gnu.org/archive/html/qemu-devel/2009-12/msg02537.html low-level]&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Unfortunately, there is no automated tool to test QMP correctness yet. Probably, the right thing to do is to integrate with [http://www.linux-kvm.org/page/KVM-Autotest kvm-autotest] but we still have to think how this should be done.&lt;br /&gt;
&lt;br /&gt;
Meanwhile, QMP testing is a low-level procedure which requires knowledge about the protocol and its implementation, so the first thing to do is to read the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] and [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt spec] files.&lt;br /&gt;
&lt;br /&gt;
This section describes two ways of testing QMP:&lt;br /&gt;
&lt;br /&gt;
* By hand (difficult, only worth it if you&#039;re chasing a specific bug)&lt;br /&gt;
* qmp-shell script (automates part of the job)&lt;br /&gt;
* Libvirt integration (assumes familiarity with libvirt)&lt;br /&gt;
&lt;br /&gt;
=== By hand ===&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a TCP socket, so that telnet can be used&lt;br /&gt;
&lt;br /&gt;
 # qemu [...] -qmp tcp:localhost:4444,server&lt;br /&gt;
&lt;br /&gt;
2. Now, run telnet&lt;br /&gt;
&lt;br /&gt;
 $ telnet localhost 4444&lt;br /&gt;
&lt;br /&gt;
3. You should see the following prompt&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
4. Now you can issue commands. For example, to get a list of QMP supported commands, run &#039;&#039;query-commands&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 { &amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (1):&#039;&#039;&#039; all &amp;quot;info&amp;quot; commands are available under QMP as &amp;quot;query-&amp;quot;, for example &amp;quot;info vnc&amp;quot; is &amp;quot;query-vnc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (2):&#039;&#039;&#039; QMP doesn&#039;t have user documentation yet, this means that, to find out which arguments a command accepts or what&#039;s its output, you will have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
=== qmp-shell script ===&lt;br /&gt;
&lt;br /&gt;
This script is available under the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP QMP] directory in QEMU&#039;s source-tree. It automates a bit the testing work, as it can construct commands.&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a unix socket, like:&lt;br /&gt;
&lt;br /&gt;
 # qemu [...] -qmp unix:./qmp-sock,server&lt;br /&gt;
&lt;br /&gt;
2. Run the script&lt;br /&gt;
&lt;br /&gt;
 # qmp-shell ./qmp-sock&lt;br /&gt;
&lt;br /&gt;
3. You should get the following prompt&lt;br /&gt;
&lt;br /&gt;
 (QEMU)&lt;br /&gt;
&lt;br /&gt;
4. Now you can run commands. For example, let&#039;s change the VNC password:&lt;br /&gt;
&lt;br /&gt;
 (QEMU) change device=vnc target=password arg=&#039;1234&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: To find out what arguments a command accepts, you have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
=== Libvirt ===&lt;br /&gt;
&lt;br /&gt;
Libvirt already has QMP support, but it&#039;s currently disable. This test procedure explains how to enable it and put libvirt to run on top of QMP.&lt;br /&gt;
&lt;br /&gt;
1. Install [http://lloyd.github.com/yajl yajl-devel] (If you&#039;re running Fedora 12 or above just do &#039;yum install yajl-devel&#039;)&lt;br /&gt;
&lt;br /&gt;
2. From a fresh checkout of [http://libvirt.org/git/?p=libvirt.git;a=summary libvirt master branch] run the following:&lt;br /&gt;
&lt;br /&gt;
 ./autogen.sh --system --enable-compile-warnings=error&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (1):&#039;&#039;&#039; The &#039;--system&#039; flag is a shortcut for compiling with the --prefix and other directories matching a system RPM build.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (2):&#039;&#039;&#039; Make sure the final summary of autogen.sh tells you that it found the yajl library&lt;br /&gt;
&lt;br /&gt;
3. To enable QMP support, edit &#039;&#039;&#039;src/qemu/qemu_conf.c&#039;&#039;&#039; and find:&lt;br /&gt;
&lt;br /&gt;
 #if 0&lt;br /&gt;
    if (version &amp;gt;= 13000)&lt;br /&gt;
        flags |= QEMUD_CMD_FLAG_MONITOR_JSON;&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Change to &#039;#if 1&#039;, and change the version to 12000 so it detects your GIT build of QEMU&lt;br /&gt;
&lt;br /&gt;
4. Run &#039;make&#039; to build. There is no need to &#039;make install&#039; anything&lt;br /&gt;
especially since that would overwrite your RPM based install&lt;br /&gt;
&lt;br /&gt;
5. As root simply stop the current daemon &amp;amp; start the one you built&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/libvirtd stop&lt;br /&gt;
 $HOME/your/git/checkout/of/libvirt/daemon/libvirtd&lt;br /&gt;
&lt;br /&gt;
6. As root you can use the newly built virsh too&lt;br /&gt;
&lt;br /&gt;
 cd $HOME/your/git/checkout/of/libvirt/src&lt;br /&gt;
 ./virsh &amp;lt;BLAH&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_block_set_passwd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_add() instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_del() instead&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2937</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2937"/>
		<updated>2010-03-29T19:07:39Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) is a [http://www.json.org/ JSON]-based protocol which allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP&#039;s main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous messages support (ie. events)&lt;br /&gt;
* Capabilities Negotiation&lt;br /&gt;
* Stability (starting with QEMU version 0.13)&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file has a simple introduction and the  [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt full specification] is recommended for application writers.&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12. This means that QMP is still under development and there &#039;&#039;&#039;will&#039;&#039;&#039; be incompatible changes between QEMU 0.12 and QEMU 0.13.&lt;br /&gt;
&lt;br /&gt;
For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: { &amp;quot;QMP&amp;quot;: { &amp;quot;version&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot; }, &amp;quot;capabilities&amp;quot;: [] } }&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: { &amp;quot;return&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;} }&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {}}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Main developers are [mailto:lcapitulino@redhat.com Luiz Capitulino] and [mailto:armbru@redhat.com Markus Armbruster], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
=== High ===&lt;br /&gt;
&lt;br /&gt;
* do_device_add()/do_device_del() conversions (markus)&lt;br /&gt;
* do_netdev_add()/do_netdev_del() conversions (markus)&lt;br /&gt;
* do_blockdev_add()/do_blockdev_del() conversions (markus)&lt;br /&gt;
* Events Grouping (luiz)&lt;br /&gt;
* Make qmp-shell work again (luiz)&lt;br /&gt;
&lt;br /&gt;
* Self-description &amp;amp; High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
&lt;br /&gt;
=== Normal ===&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands to the QObject API&lt;br /&gt;
* Improve internal API, currently it&#039;s too [http://lists.gnu.org/archive/html/qemu-devel/2009-12/msg02537.html low-level]&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Unfortunately, there is no automated tool to test QMP correctness yet. Probably, the right thing to do is to integrate with [http://www.linux-kvm.org/page/KVM-Autotest kvm-autotest] but we still have to think how this should be done.&lt;br /&gt;
&lt;br /&gt;
Meanwhile, QMP testing is a low-level procedure which requires knowledge about the protocol and its implementation, so the first thing to do is to read the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] and [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt spec] files.&lt;br /&gt;
&lt;br /&gt;
This section describes two ways of testing QMP:&lt;br /&gt;
&lt;br /&gt;
* By hand (difficult, only worth it if you&#039;re chasing a specific bug)&lt;br /&gt;
* qmp-shell script (automates part of the job)&lt;br /&gt;
* Libvirt integration (assumes familiarity with libvirt)&lt;br /&gt;
&lt;br /&gt;
=== By hand ===&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a TCP socket, so that telnet can be used&lt;br /&gt;
&lt;br /&gt;
 # qemu [...] -qmp tcp:localhost:4444,server&lt;br /&gt;
&lt;br /&gt;
2. Now, run telnet&lt;br /&gt;
&lt;br /&gt;
 $ telnet localhost 4444&lt;br /&gt;
&lt;br /&gt;
3. You should see the following prompt&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
4. Now you can issue commands. For example, to get a list of QMP supported commands, run &#039;&#039;query-commands&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 { &amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (1):&#039;&#039;&#039; all &amp;quot;info&amp;quot; commands are available under QMP as &amp;quot;query-&amp;quot;, for example &amp;quot;info vnc&amp;quot; is &amp;quot;query-vnc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (2):&#039;&#039;&#039; QMP doesn&#039;t have user documentation yet, this means that, to find out which arguments a command accepts or what&#039;s its output, you will have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
=== qmp-shell script ===&lt;br /&gt;
&lt;br /&gt;
This script is available under the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP QMP] directory in QEMU&#039;s source-tree. It automates a bit the testing work, as it can construct commands.&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a unix socket, like:&lt;br /&gt;
&lt;br /&gt;
 # qemu [...] -qmp unix:./qmp-sock,server&lt;br /&gt;
&lt;br /&gt;
2. Run the script&lt;br /&gt;
&lt;br /&gt;
 # qmp-shell ./qmp-sock&lt;br /&gt;
&lt;br /&gt;
3. You should get the following prompt&lt;br /&gt;
&lt;br /&gt;
 (QEMU)&lt;br /&gt;
&lt;br /&gt;
4. Now you can run commands. For example, let&#039;s change the VNC password:&lt;br /&gt;
&lt;br /&gt;
 (QEMU) change device=vnc target=password arg=&#039;1234&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: To find out what arguments a command accepts, you have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
=== Libvirt ===&lt;br /&gt;
&lt;br /&gt;
Libvirt already has QMP support, but it&#039;s currently disable. This test procedure explains how to enable it and put libvirt to run on top of QMP.&lt;br /&gt;
&lt;br /&gt;
1. Install [http://lloyd.github.com/yajl yajl-devel] (If you&#039;re running Fedora 12 or above just do &#039;yum install yajl-devel&#039;)&lt;br /&gt;
&lt;br /&gt;
2. From a fresh checkout of [http://libvirt.org/git/?p=libvirt.git;a=summary libvirt master branch] run the following:&lt;br /&gt;
&lt;br /&gt;
 ./autogen.sh --system --enable-compile-warnings=error&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (1):&#039;&#039;&#039; The &#039;--system&#039; flag is a shortcut for compiling with the --prefix and other directories matching a system RPM build.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (2):&#039;&#039;&#039; Make sure the final summary of autogen.sh tells you that it found the yajl library&lt;br /&gt;
&lt;br /&gt;
3. To enable QMP support, edit &#039;&#039;&#039;src/qemu/qemu_conf.c&#039;&#039;&#039; and find:&lt;br /&gt;
&lt;br /&gt;
 #if 0&lt;br /&gt;
    if (version &amp;gt;= 13000)&lt;br /&gt;
        flags |= QEMUD_CMD_FLAG_MONITOR_JSON;&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Change to &#039;#if 1&#039;, and change the version to 12000 so it detects your GIT build of QEMU&lt;br /&gt;
&lt;br /&gt;
4. Run &#039;make&#039; to build. There is no need to &#039;make install&#039; anything&lt;br /&gt;
especially since that would overwrite your RPM based install&lt;br /&gt;
&lt;br /&gt;
5. As root simply stop the current daemon &amp;amp; start the one you built&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/libvirtd stop&lt;br /&gt;
 $HOME/your/git/checkout/of/libvirt/daemon/libvirtd&lt;br /&gt;
&lt;br /&gt;
6. As root you can use the newly built virsh too&lt;br /&gt;
&lt;br /&gt;
 cd $HOME/your/git/checkout/of/libvirt/src&lt;br /&gt;
 ./virsh &amp;lt;BLAH&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_block_set_passwd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_add() instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_del() instead&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2936</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2936"/>
		<updated>2010-03-29T18:54:08Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) is a [http://www.json.org/ JSON]-based protocol which allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP&#039;s main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous messages support (ie. events)&lt;br /&gt;
* Capabilities Negotiation&lt;br /&gt;
* Stability (starting with QEMU version 0.13)&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file has a simple introduction and the  [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt full specification] is recommended for application writers.&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12. This means that QMP is still under development and there &#039;&#039;&#039;will&#039;&#039;&#039; be incompatible changes between QEMU 0.12 and QEMU 0.13.&lt;br /&gt;
&lt;br /&gt;
For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: { &amp;quot;QMP&amp;quot;: { &amp;quot;version&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot; }, &amp;quot;capabilities&amp;quot;: [] } }&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: { &amp;quot;return&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;} }&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {}}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Main developers are [mailto:lcapitulino@redhat.com Luiz Capitulino] and [mailto:armbru@redhat.com Markus Armbruster], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands&lt;br /&gt;
* High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Improve internal API, currently it&#039;s too [http://lists.gnu.org/archive/html/qemu-devel/2009-12/msg02537.html low-level]&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Unfortunately, there is no automated tool to test QMP correctness yet. Probably, the right thing to do is to integrate with [http://www.linux-kvm.org/page/KVM-Autotest kvm-autotest] but we still have to think how this should be done.&lt;br /&gt;
&lt;br /&gt;
Meanwhile, QMP testing is a low-level procedure which requires knowledge about the protocol and its implementation, so the first thing to do is to read the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] and [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt spec] files.&lt;br /&gt;
&lt;br /&gt;
This section describes two ways of testing QMP:&lt;br /&gt;
&lt;br /&gt;
* By hand (difficult, only worth it if you&#039;re chasing a specific bug)&lt;br /&gt;
* qmp-shell script (automates part of the job)&lt;br /&gt;
* Libvirt integration (assumes familiarity with libvirt)&lt;br /&gt;
&lt;br /&gt;
=== By hand ===&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a TCP socket, so that telnet can be used&lt;br /&gt;
&lt;br /&gt;
 # qemu [...] -qmp tcp:localhost:4444,server&lt;br /&gt;
&lt;br /&gt;
2. Now, run telnet&lt;br /&gt;
&lt;br /&gt;
 $ telnet localhost 4444&lt;br /&gt;
&lt;br /&gt;
3. You should see the following prompt&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
4. Now you can issue commands. For example, to get a list of QMP supported commands, run &#039;&#039;query-commands&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 { &amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (1):&#039;&#039;&#039; all &amp;quot;info&amp;quot; commands are available under QMP as &amp;quot;query-&amp;quot;, for example &amp;quot;info vnc&amp;quot; is &amp;quot;query-vnc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (2):&#039;&#039;&#039; QMP doesn&#039;t have user documentation yet, this means that, to find out which arguments a command accepts or what&#039;s its output, you will have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
=== qmp-shell script ===&lt;br /&gt;
&lt;br /&gt;
This script is available under the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP QMP] directory in QEMU&#039;s source-tree. It automates a bit the testing work, as it can construct commands.&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a unix socket, like:&lt;br /&gt;
&lt;br /&gt;
 # qemu [...] -qmp unix:./qmp-sock,server&lt;br /&gt;
&lt;br /&gt;
2. Run the script&lt;br /&gt;
&lt;br /&gt;
 # qmp-shell ./qmp-sock&lt;br /&gt;
&lt;br /&gt;
3. You should get the following prompt&lt;br /&gt;
&lt;br /&gt;
 (QEMU)&lt;br /&gt;
&lt;br /&gt;
4. Now you can run commands. For example, let&#039;s change the VNC password:&lt;br /&gt;
&lt;br /&gt;
 (QEMU) change device=vnc target=password arg=&#039;1234&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: To find out what arguments a command accepts, you have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
=== Libvirt ===&lt;br /&gt;
&lt;br /&gt;
Libvirt already has QMP support, but it&#039;s currently disable. This test procedure explains how to enable it and put libvirt to run on top of QMP.&lt;br /&gt;
&lt;br /&gt;
1. Install [http://lloyd.github.com/yajl yajl-devel] (If you&#039;re running Fedora 12 or above just do &#039;yum install yajl-devel&#039;)&lt;br /&gt;
&lt;br /&gt;
2. From a fresh checkout of [http://libvirt.org/git/?p=libvirt.git;a=summary libvirt master branch] run the following:&lt;br /&gt;
&lt;br /&gt;
 ./autogen.sh --system --enable-compile-warnings=error&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (1):&#039;&#039;&#039; The &#039;--system&#039; flag is a shortcut for compiling with the --prefix and other directories matching a system RPM build.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (2):&#039;&#039;&#039; Make sure the final summary of autogen.sh tells you that it found the yajl library&lt;br /&gt;
&lt;br /&gt;
3. To enable QMP support, edit &#039;&#039;&#039;src/qemu/qemu_conf.c&#039;&#039;&#039; and find:&lt;br /&gt;
&lt;br /&gt;
 #if 0&lt;br /&gt;
    if (version &amp;gt;= 13000)&lt;br /&gt;
        flags |= QEMUD_CMD_FLAG_MONITOR_JSON;&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Change to &#039;#if 1&#039;, and change the version to 12000 so it detects your GIT build of QEMU&lt;br /&gt;
&lt;br /&gt;
4. Run &#039;make&#039; to build. There is no need to &#039;make install&#039; anything&lt;br /&gt;
especially since that would overwrite your RPM based install&lt;br /&gt;
&lt;br /&gt;
5. As root simply stop the current daemon &amp;amp; start the one you built&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/libvirtd stop&lt;br /&gt;
 $HOME/your/git/checkout/of/libvirt/daemon/libvirtd&lt;br /&gt;
&lt;br /&gt;
6. As root you can use the newly built virsh too&lt;br /&gt;
&lt;br /&gt;
 cd $HOME/your/git/checkout/of/libvirt/src&lt;br /&gt;
 ./virsh &amp;lt;BLAH&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_block_set_passwd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_add() instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_del() instead&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2935</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2935"/>
		<updated>2010-03-29T18:52:26Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) is a [http://www.json.org/ JSON]-based protocol which allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP&#039;s main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous messages support (ie. events)&lt;br /&gt;
* Capabilities Negotiation&lt;br /&gt;
* Stability (starting with QEMU version 0.13)&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file has a simple introduction and the  [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt full specification] is recommended for application writers.&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12. This means that QMP is still under development and there &#039;&#039;&#039;will&#039;&#039;&#039; be incompatible changes between QEMU 0.12 and QEMU 0.13.&lt;br /&gt;
&lt;br /&gt;
For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: { &amp;quot;QMP&amp;quot;: { &amp;quot;version&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot; }, &amp;quot;capabilities&amp;quot;: [] } }&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: { &amp;quot;return&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;} }&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {}}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Main developers are [mailto:lcapitulino@redhat.com Luiz Capitulino] and [mailto:armbru@redhat.com Markus Armbruster], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands&lt;br /&gt;
* High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Improve internal API, currently it&#039;s too [http://lists.gnu.org/archive/html/qemu-devel/2009-12/msg02537.html low-level]&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Unfortunately, there is no automated tool to test QMP correctness yet. Probably, the right thing to do is to integrate with [http://www.linux-kvm.org/page/KVM-Autotest kvm-autotest] but we still have to think how this should be done.&lt;br /&gt;
&lt;br /&gt;
Meanwhile, QMP testing is a low-level procedure which requires knowledge about the protocol and its implementation, so the first thing to do is to read the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] and [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt spec] files.&lt;br /&gt;
&lt;br /&gt;
This section describes two ways of testing QMP:&lt;br /&gt;
&lt;br /&gt;
* By hand (difficult, only worth it if you&#039;re chasing a specific bug)&lt;br /&gt;
* qmp-shell script (automates part of the job)&lt;br /&gt;
* Libvirt integration (assumes familiarity with libvirt)&lt;br /&gt;
&lt;br /&gt;
=== By hand ===&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a TCP socket, so that telnet can be used&lt;br /&gt;
&lt;br /&gt;
 # qemu [...] -qmp tcp:localhost:4444,server&lt;br /&gt;
&lt;br /&gt;
2. Now, run telnet&lt;br /&gt;
&lt;br /&gt;
 $ telnet localhost 4444&lt;br /&gt;
&lt;br /&gt;
3. You should see the following prompt&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
4. Now you can issue commands. For example, to get a list of QMP supported commands, run &#039;&#039;query-commands&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 { &amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (1):&#039;&#039;&#039; all &amp;quot;info&amp;quot; commands are available under QMP as &amp;quot;query-&amp;quot;, for example &amp;quot;info vnc&amp;quot; is &amp;quot;query-vnc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (2):&#039;&#039;&#039; QMP doesn&#039;t have user documentation yet, this means that, to find out which arguments a command accepts or what&#039;s its output, you will have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
=== qmp-shell script ===&lt;br /&gt;
&lt;br /&gt;
This script is available under the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP QMP] directory in QEMU&#039;s source-tree. It automates a bit the testing work, as it can construct commands.&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a unix socket, like:&lt;br /&gt;
&lt;br /&gt;
 # qemu [...] -qmp unix:./qmp-sock,server&lt;br /&gt;
&lt;br /&gt;
2. Run the script&lt;br /&gt;
&lt;br /&gt;
 # qmp-shell ./qmp-sock&lt;br /&gt;
&lt;br /&gt;
3. You should get the following prompt&lt;br /&gt;
&lt;br /&gt;
 (QEMU)&lt;br /&gt;
&lt;br /&gt;
4. Now you can run commands. For example, let&#039;s change the VNC password:&lt;br /&gt;
&lt;br /&gt;
 (QEMU) change device=vnc target=password arg=&#039;1234&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: To find out what arguments a command accepts, you have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
=== Libvirt ===&lt;br /&gt;
&lt;br /&gt;
Libvirt already has QMP support, but it&#039;s currently disable. This test procedure explains how to enable it and put libvirt to run on top of QMP.&lt;br /&gt;
&lt;br /&gt;
1. Install [http://lloyd.github.com/yajl yajl-devel] (If you&#039;re running Fedora 12 (or above) just do &#039;yum install yajl-devel&#039;)&lt;br /&gt;
&lt;br /&gt;
2. From a fresh checkout of [http://libvirt.org/git/?p=libvirt.git;a=summary GIT master] run the following:&lt;br /&gt;
&lt;br /&gt;
 ./autogen.sh --system --enable-compile-warnings=error&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (1):&#039;&#039;&#039; The &#039;--system&#039; flag is a shortcut for compiling with the --prefix and other directories matching a system RPM build.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (2):&#039;&#039;&#039; Make sure the final summary of autogen.sh tells you that it found the yajl library&lt;br /&gt;
&lt;br /&gt;
3. To enable QMP support, edit &#039;&#039;&#039;src/qemu/qemu_conf.c&#039;&#039;&#039; and find:&lt;br /&gt;
&lt;br /&gt;
 #if 0&lt;br /&gt;
    if (version &amp;gt;= 13000)&lt;br /&gt;
        flags |= QEMUD_CMD_FLAG_MONITOR_JSON;&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Change to &#039;#if 1&#039;, and change the version to 12000 so it detects your GIT build of QEMU&lt;br /&gt;
&lt;br /&gt;
4. Run &#039;make&#039; to build. There is no need to &#039;make install&#039; anything&lt;br /&gt;
especially since that would overwrite your RPM based install&lt;br /&gt;
&lt;br /&gt;
5. As root simply stop the current daemon &amp;amp; start the one you built&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/libvirtd stop&lt;br /&gt;
 $HOME/your/git/checkout/of/libvirt/daemon/libvirtd&lt;br /&gt;
&lt;br /&gt;
6. As root you can use the newly built virsh too&lt;br /&gt;
&lt;br /&gt;
 cd $HOME/your/git/checkout/of/libvirt/src&lt;br /&gt;
 ./virsh &amp;lt;BLAH&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_block_set_passwd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_add() instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_del() instead&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2934</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2934"/>
		<updated>2010-03-29T18:44:23Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) is a [http://www.json.org/ JSON]-based protocol which allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP&#039;s main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous messages support (ie. events)&lt;br /&gt;
* Capabilities Negotiation&lt;br /&gt;
* Stability (starting with QEMU version 0.13)&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file has a simple introduction and the  [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt full specification] is recommended for application writers.&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12. This means that QMP is still under development and there &#039;&#039;&#039;will&#039;&#039;&#039; be incompatible changes between QEMU 0.12 and QEMU 0.13.&lt;br /&gt;
&lt;br /&gt;
For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: { &amp;quot;QMP&amp;quot;: { &amp;quot;version&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot; }, &amp;quot;capabilities&amp;quot;: [] } }&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: { &amp;quot;return&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;} }&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {}}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Main developers are [mailto:lcapitulino@redhat.com Luiz Capitulino] and [mailto:armbru@redhat.com Markus Armbruster], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands&lt;br /&gt;
* High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Improve internal API, currently it&#039;s too [http://lists.gnu.org/archive/html/qemu-devel/2009-12/msg02537.html low-level]&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Unfortunately, there is no automated tool to test QMP correctness yet. Probably, the right thing to do is to integrate with [http://www.linux-kvm.org/page/KVM-Autotest kvm-autotest] but we still have to think how this should be done.&lt;br /&gt;
&lt;br /&gt;
Meanwhile, QMP testing is a low-level procedure which requires knowledge about the protocol and its implementation, so the first thing to do is to read the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] and [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt spec] files.&lt;br /&gt;
&lt;br /&gt;
This section describes two ways of testing QMP:&lt;br /&gt;
&lt;br /&gt;
* By hand (difficult, only worth it if you&#039;re chasing a specific bug)&lt;br /&gt;
* qmp-shell script (automates part of the job)&lt;br /&gt;
* Libvirt integration&lt;br /&gt;
&lt;br /&gt;
=== By hand ===&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a TCP socket, so that telnet can be used&lt;br /&gt;
&lt;br /&gt;
 # qemu [...] -qmp tcp:localhost:4444,server&lt;br /&gt;
&lt;br /&gt;
2. Now, run telnet&lt;br /&gt;
&lt;br /&gt;
 $ telnet localhost 4444&lt;br /&gt;
&lt;br /&gt;
3. You should see the following prompt&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
4. Now you can issue commands. For example, to get a list of QMP supported commands, run &#039;&#039;query-commands&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 { &amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (1):&#039;&#039;&#039; all &amp;quot;info&amp;quot; commands are available under QMP as &amp;quot;query-&amp;quot;, for example &amp;quot;info vnc&amp;quot; is &amp;quot;query-vnc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (2):&#039;&#039;&#039; QMP doesn&#039;t have user documentation yet, this means that, to find out which arguments a command accepts or what&#039;s its output, you will have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
=== qmp-shell script ===&lt;br /&gt;
&lt;br /&gt;
This script is available under the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP QMP] directory in QEMU&#039;s source-tree. It automates a bit the testing work, as it can construct commands.&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a unix socket, like:&lt;br /&gt;
&lt;br /&gt;
 # qemu [...] -qmp unix:./qmp-sock,server&lt;br /&gt;
&lt;br /&gt;
2. Run the script&lt;br /&gt;
&lt;br /&gt;
 # qmp-shell ./qmp-sock&lt;br /&gt;
&lt;br /&gt;
3. You should get the following prompt&lt;br /&gt;
&lt;br /&gt;
 (QEMU)&lt;br /&gt;
&lt;br /&gt;
4. Now you can run commands. For example, let&#039;s change the VNC password:&lt;br /&gt;
&lt;br /&gt;
 (QEMU) change device=vnc target=password arg=&#039;1234&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: To find out what arguments a command accepts, you have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
=== Libvirt ===&lt;br /&gt;
&lt;br /&gt;
1. Install [http://lloyd.github.com/yajl yajl-devel]  before running &#039;autogen.sh&#039;. Make sure the final summary of autogen.sh tells you that it found the yajl library. If you`re running Fedora 12(or above) just yum install yajl-devel.&lt;br /&gt;
&lt;br /&gt;
2. From a fresh checkout of [http://libvirt.org/git/?p=libvirt.git;a=summary GIT master] run the following:&lt;br /&gt;
&lt;br /&gt;
 ./autogen.sh --system --enable-compile-warnings=error&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; The &#039;--system&#039; flag is a shortcut for compiling with the --prefix and other directories matching a system RPM build.&lt;br /&gt;
&lt;br /&gt;
3. Run &#039;make&#039; to build. There is no need to &#039;make install&#039; anything&lt;br /&gt;
especially since that would overwrite your RPM based install&lt;br /&gt;
&lt;br /&gt;
4. As root simply stop the current daemon &amp;amp; start the one you built&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/libvirtd stop&lt;br /&gt;
 $HOME/your/git/checkout/of/libvirt/daemon/libvirtd&lt;br /&gt;
&lt;br /&gt;
5. As root you can use the newly built virsh too&lt;br /&gt;
&lt;br /&gt;
 cd $HOME/your/git/checkout/of/libvirt/src&lt;br /&gt;
 ./virsh &amp;lt;BLAH&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. To enable QMP support, before you build edit &#039;&#039;&#039;src/qemu/qemu_conf.c&#039;&#039;&#039; and find:&lt;br /&gt;
&lt;br /&gt;
 #if 0&lt;br /&gt;
    if (version &amp;gt;= 13000)&lt;br /&gt;
        flags |= QEMUD_CMD_FLAG_MONITOR_JSON;&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; If enabled libvirt will use QMP as default monitor.&lt;br /&gt;
&lt;br /&gt;
7. Change that to an &#039;#if 1&#039;, and change the version to 12000 so it detects your GIT build of QEMU&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_block_set_passwd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_add() instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_del() instead&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2933</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2933"/>
		<updated>2010-03-29T18:43:40Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) is a [http://www.json.org/ JSON]-based protocol which allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP&#039;s main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous messages support (ie. events)&lt;br /&gt;
* Capabilities Negotiation&lt;br /&gt;
* Stability (starting with QEMU version 0.13)&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file has a simple introduction and the  [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt full specification] is recommended for application writers.&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12. This means that QMP is still under development and there &#039;&#039;&#039;will&#039;&#039;&#039; be incompatible changes between QEMU 0.12 and QEMU 0.13.&lt;br /&gt;
&lt;br /&gt;
For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: { &amp;quot;QMP&amp;quot;: { &amp;quot;version&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot; }, &amp;quot;capabilities&amp;quot;: [] } }&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: { &amp;quot;return&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;} }&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {}}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Main developers are [mailto:lcapitulino@redhat.com Luiz Capitulino] and [mailto:armbru@redhat.com Markus Armbruster], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands&lt;br /&gt;
* High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Improve internal API, currently it&#039;s too [http://lists.gnu.org/archive/html/qemu-devel/2009-12/msg02537.html low-level]&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Unfortunately, there is no automated tool to test QMP correctness yet. Probably, the right thing to do is to integrate with [http://www.linux-kvm.org/page/KVM-Autotest kvm-autotest] but we still have to think how this should be done.&lt;br /&gt;
&lt;br /&gt;
Meanwhile, QMP testing is a low-level procedure which requires knowledge about the protocol and its implementation, so the first thing to do is to read the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] and [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt spec] files.&lt;br /&gt;
&lt;br /&gt;
This section describes two ways of testing QMP:&lt;br /&gt;
&lt;br /&gt;
* By hand (difficult, only worth it if you&#039;re chasing a specific bug)&lt;br /&gt;
* qmp-shell script (automates part of the job)&lt;br /&gt;
* Libvirt integration&lt;br /&gt;
&lt;br /&gt;
=== By hand ===&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a TCP socket, so that telnet can be used&lt;br /&gt;
&lt;br /&gt;
 # qemu [...] -qmp tcp:localhost:4444,server&lt;br /&gt;
&lt;br /&gt;
2. Now, run telnet&lt;br /&gt;
&lt;br /&gt;
 $ telnet localhost 4444&lt;br /&gt;
&lt;br /&gt;
3. You should see the following prompt&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
4. Now you can issue commands. For example, to get a list of QMP supported commands, run &#039;&#039;query-commands&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 { &amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (1):&#039;&#039;&#039; all &amp;quot;info&amp;quot; commands are available under QMP as &amp;quot;query-&amp;quot;, for example &amp;quot;info vnc&amp;quot; is &amp;quot;query-vnc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (2):&#039;&#039;&#039; QMP doesn&#039;t have user documentation yet, this means that, to find out which arguments a command accepts or what&#039;s its output, you will have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
=== qmp-shell script ===&lt;br /&gt;
&lt;br /&gt;
This script is available under the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP QMP] directory in QEMU&#039;s source-tree. It automates a bit the testing work, as it can construct commands.&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a unix socket, like:&lt;br /&gt;
&lt;br /&gt;
 qemu [...] -qmp unix:./qmp-sock,server&lt;br /&gt;
&lt;br /&gt;
2. Run the script&lt;br /&gt;
&lt;br /&gt;
 qmp-shell ./qmp-sock&lt;br /&gt;
&lt;br /&gt;
3. You should get the following prompt&lt;br /&gt;
&lt;br /&gt;
 (QEMU)&lt;br /&gt;
&lt;br /&gt;
4. Now you can run commands. For example, let&#039;s change the VNC password:&lt;br /&gt;
&lt;br /&gt;
 (QEMU) change device=vnc target=password arg=&#039;1234&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: To find out what arguments a command accepts, you have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
=== Libvirt ===&lt;br /&gt;
&lt;br /&gt;
1. Install [http://lloyd.github.com/yajl yajl-devel]  before running &#039;autogen.sh&#039;. Make sure the final summary of autogen.sh tells you that it found the yajl library. If you`re running Fedora 12(or above) just yum install yajl-devel.&lt;br /&gt;
&lt;br /&gt;
2. From a fresh checkout of [http://libvirt.org/git/?p=libvirt.git;a=summary GIT master] run the following:&lt;br /&gt;
&lt;br /&gt;
 ./autogen.sh --system --enable-compile-warnings=error&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; The &#039;--system&#039; flag is a shortcut for compiling with the --prefix and other directories matching a system RPM build.&lt;br /&gt;
&lt;br /&gt;
3. Run &#039;make&#039; to build. There is no need to &#039;make install&#039; anything&lt;br /&gt;
especially since that would overwrite your RPM based install&lt;br /&gt;
&lt;br /&gt;
4. As root simply stop the current daemon &amp;amp; start the one you built&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/libvirtd stop&lt;br /&gt;
 $HOME/your/git/checkout/of/libvirt/daemon/libvirtd&lt;br /&gt;
&lt;br /&gt;
5. As root you can use the newly built virsh too&lt;br /&gt;
&lt;br /&gt;
 cd $HOME/your/git/checkout/of/libvirt/src&lt;br /&gt;
 ./virsh &amp;lt;BLAH&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. To enable QMP support, before you build edit &#039;&#039;&#039;src/qemu/qemu_conf.c&#039;&#039;&#039; and find:&lt;br /&gt;
&lt;br /&gt;
 #if 0&lt;br /&gt;
    if (version &amp;gt;= 13000)&lt;br /&gt;
        flags |= QEMUD_CMD_FLAG_MONITOR_JSON;&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; If enabled libvirt will use QMP as default monitor.&lt;br /&gt;
&lt;br /&gt;
7. Change that to an &#039;#if 1&#039;, and change the version to 12000 so it detects your GIT build of QEMU&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_block_set_passwd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_add() instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_del() instead&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2932</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2932"/>
		<updated>2010-03-29T18:41:15Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) is a [http://www.json.org/ JSON]-based protocol which allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP&#039;s main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous messages support (ie. events)&lt;br /&gt;
* Capabilities Negotiation&lt;br /&gt;
* Stability (starting with QEMU version 0.13)&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file has a simple introduction and the  [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt full specification] is recommended for application writers.&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12. This means that QMP is still under development and there &#039;&#039;&#039;will&#039;&#039;&#039; be incompatible changes between QEMU 0.12 and QEMU 0.13.&lt;br /&gt;
&lt;br /&gt;
For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: { &amp;quot;QMP&amp;quot;: { &amp;quot;version&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot; }, &amp;quot;capabilities&amp;quot;: [] } }&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: { &amp;quot;return&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;} }&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {}}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Main developers are [mailto:lcapitulino@redhat.com Luiz Capitulino] and [mailto:armbru@redhat.com Markus Armbruster], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands&lt;br /&gt;
* High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Improve internal API, currently it&#039;s too [http://lists.gnu.org/archive/html/qemu-devel/2009-12/msg02537.html low-level]&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Unfortunately, there is no automated tool to test QMP correctness yet. Probably, the right thing to do is to integrate with [http://www.linux-kvm.org/page/KVM-Autotest kvm-autotest] but we still have to think how this should be done.&lt;br /&gt;
&lt;br /&gt;
Meanwhile, QMP testing is a low-level procedure which requires knowledge about the protocol and its implementation, so the first thing to do is to read the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] and [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt spec] files.&lt;br /&gt;
&lt;br /&gt;
This section describes two ways of testing QMP:&lt;br /&gt;
&lt;br /&gt;
* By hand (difficult, only worth it if you&#039;re chasing a specific bug)&lt;br /&gt;
* qmp-shell script (automates part of the job)&lt;br /&gt;
* Libvirt integration&lt;br /&gt;
&lt;br /&gt;
=== By hand ===&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a TCP socket, so that telnet can be used&lt;br /&gt;
&lt;br /&gt;
 # qemu [...] -qmp tcp:localhost:4444,server&lt;br /&gt;
&lt;br /&gt;
2. Now, run telnet&lt;br /&gt;
&lt;br /&gt;
 $ telnet localhost 4444&lt;br /&gt;
&lt;br /&gt;
3. You should see the following prompt&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
4. Now you can issue commands. For example, to get a list of QMP supported commands, run &#039;&#039;query-commands&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 { &amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (1):&#039;&#039;&#039; all &amp;quot;info&amp;quot; commands are available under QMP as &amp;quot;query-&amp;quot;, for example &amp;quot;info vnc&amp;quot; is &amp;quot;query-vnc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE (2):&#039;&#039;&#039; QMP doesn&#039;t have user documentation yet, this means that, to find out which arguments a command accepts or what&#039;s its output, you will have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
=== Libvirt ===&lt;br /&gt;
&lt;br /&gt;
1. Install [http://lloyd.github.com/yajl yajl-devel]  before running &#039;autogen.sh&#039;. Make sure the final summary of autogen.sh tells you that it found the yajl library. If you`re running Fedora 12(or above) just yum install yajl-devel.&lt;br /&gt;
&lt;br /&gt;
2. From a fresh checkout of [http://libvirt.org/git/?p=libvirt.git;a=summary GIT master] run the following:&lt;br /&gt;
&lt;br /&gt;
 ./autogen.sh --system --enable-compile-warnings=error&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; The &#039;--system&#039; flag is a shortcut for compiling with the --prefix and other directories matching a system RPM build.&lt;br /&gt;
&lt;br /&gt;
3. Run &#039;make&#039; to build. There is no need to &#039;make install&#039; anything&lt;br /&gt;
especially since that would overwrite your RPM based install&lt;br /&gt;
&lt;br /&gt;
4. As root simply stop the current daemon &amp;amp; start the one you built&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/libvirtd stop&lt;br /&gt;
 $HOME/your/git/checkout/of/libvirt/daemon/libvirtd&lt;br /&gt;
&lt;br /&gt;
5. As root you can use the newly built virsh too&lt;br /&gt;
&lt;br /&gt;
 cd $HOME/your/git/checkout/of/libvirt/src&lt;br /&gt;
 ./virsh &amp;lt;BLAH&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. To enable QMP support, before you build edit &#039;&#039;&#039;src/qemu/qemu_conf.c&#039;&#039;&#039; and find:&lt;br /&gt;
&lt;br /&gt;
 #if 0&lt;br /&gt;
    if (version &amp;gt;= 13000)&lt;br /&gt;
        flags |= QEMUD_CMD_FLAG_MONITOR_JSON;&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; If enabled libvirt will use QMP as default monitor.&lt;br /&gt;
&lt;br /&gt;
7. Change that to an &#039;#if 1&#039;, and change the version to 12000 so it detects your GIT build of QEMU&lt;br /&gt;
&lt;br /&gt;
=== qmp-shell script ===&lt;br /&gt;
&lt;br /&gt;
This script is available under the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP QMP] directory in QEMU&#039;s source-tree. It automates a bit the testing work, as it can construct commands.&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a unix socket, like:&lt;br /&gt;
&lt;br /&gt;
 qemu [...] -qmp unix:./qmp-sock,server&lt;br /&gt;
&lt;br /&gt;
2. Run the script&lt;br /&gt;
&lt;br /&gt;
 qmp-shell ./qmp-sock&lt;br /&gt;
&lt;br /&gt;
3. You should get the following prompt&lt;br /&gt;
&lt;br /&gt;
 (QEMU)&lt;br /&gt;
&lt;br /&gt;
4. Now you can run commands. For example, let&#039;s change the VNC password:&lt;br /&gt;
&lt;br /&gt;
 (QEMU) change device=vnc target=password arg=&#039;1234&#039;&lt;br /&gt;
&lt;br /&gt;
So, it&#039;s needed to name the arguments and the script is not very smart. Again, to find out what arguments a command accepts, you have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
Have fun!&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_block_set_passwd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_add() instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_del() instead&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2931</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2931"/>
		<updated>2010-03-29T18:35:58Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) is a [http://www.json.org/ JSON]-based protocol which allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP&#039;s main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous messages support (ie. events)&lt;br /&gt;
* Capabilities Negotiation&lt;br /&gt;
* Stability (starting with QEMU version 0.13)&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file has a simple introduction and the  [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt full specification] is recommended for application writers.&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12. This means that QMP is still under development and there &#039;&#039;&#039;will&#039;&#039;&#039; be incompatible changes between QEMU 0.12 and QEMU 0.13.&lt;br /&gt;
&lt;br /&gt;
For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: { &amp;quot;QMP&amp;quot;: { &amp;quot;version&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot; }, &amp;quot;capabilities&amp;quot;: [] } }&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: { &amp;quot;return&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;} }&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {}}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Main developers are [mailto:lcapitulino@redhat.com Luiz Capitulino] and [mailto:armbru@redhat.com Markus Armbruster], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands&lt;br /&gt;
* High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Improve internal API, currently it&#039;s too [http://lists.gnu.org/archive/html/qemu-devel/2009-12/msg02537.html low-level]&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Unfortunately, there is no automated tool to test QMP correctness yet. Probably, the right thing to do is to integrate with [http://www.linux-kvm.org/page/KVM-Autotest kvm-autotest] but we still have to think how this should be done.&lt;br /&gt;
&lt;br /&gt;
Meanwhile, QMP testing is a low-level procedure which requires knowledge about the protocol and its implementation, so the first thing to do is to read the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] and [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt spec] files.&lt;br /&gt;
&lt;br /&gt;
This section describes two ways of testing QMP:&lt;br /&gt;
&lt;br /&gt;
* By hand (difficult, only worth it if you&#039;re chasing a specific bug)&lt;br /&gt;
* Using qmp-shell script (automates part of the job)&lt;br /&gt;
&lt;br /&gt;
=== Libvirt ===&lt;br /&gt;
&lt;br /&gt;
1. Install [http://lloyd.github.com/yajl yajl-devel]  before running &#039;autogen.sh&#039;. Make sure the final summary of autogen.sh tells you that it found the yajl library. If you`re running Fedora 12(or above) just yum install yajl-devel.&lt;br /&gt;
&lt;br /&gt;
2. From a fresh checkout of [http://libvirt.org/git/?p=libvirt.git;a=summary GIT master] run the following:&lt;br /&gt;
&lt;br /&gt;
 ./autogen.sh --system --enable-compile-warnings=error&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; The &#039;--system&#039; flag is a shortcut for compiling with the --prefix and other directories matching a system RPM build.&lt;br /&gt;
&lt;br /&gt;
3. Run &#039;make&#039; to build. There is no need to &#039;make install&#039; anything&lt;br /&gt;
especially since that would overwrite your RPM based install&lt;br /&gt;
&lt;br /&gt;
4. As root simply stop the current daemon &amp;amp; start the one you built&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/libvirtd stop&lt;br /&gt;
 $HOME/your/git/checkout/of/libvirt/daemon/libvirtd&lt;br /&gt;
&lt;br /&gt;
5. As root you can use the newly built virsh too&lt;br /&gt;
&lt;br /&gt;
 cd $HOME/your/git/checkout/of/libvirt/src&lt;br /&gt;
 ./virsh &amp;lt;BLAH&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. To enable QMP support, before you build edit &#039;&#039;&#039;src/qemu/qemu_conf.c&#039;&#039;&#039; and find:&lt;br /&gt;
&lt;br /&gt;
 #if 0&lt;br /&gt;
    if (version &amp;gt;= 13000)&lt;br /&gt;
        flags |= QEMUD_CMD_FLAG_MONITOR_JSON;&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; If enabled libvirt will use QMP as default monitor.&lt;br /&gt;
&lt;br /&gt;
7. Change that to an &#039;#if 1&#039;, and change the version to 12000 so it detects your GIT build of QEMU&lt;br /&gt;
&lt;br /&gt;
=== By hand ===&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a TCP socket, so that telnet can be used&lt;br /&gt;
&lt;br /&gt;
 qemu [...] -qmp tcp:localhost:4444,server&lt;br /&gt;
&lt;br /&gt;
2. Now, run telnet&lt;br /&gt;
&lt;br /&gt;
 telnet localhost 4444&lt;br /&gt;
&lt;br /&gt;
3. You should see the following prompt&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
4. Now you can issue commands. To get a list of QMP supported commands, run &#039;&#039;query-commands&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 { &amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; all &amp;quot;info&amp;quot; commands are available under QMP as &amp;quot;query-&amp;quot;, for example &amp;quot;info vnc&amp;quot; is &amp;quot;query-vnc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The output of &#039;&#039;query-commands&#039;&#039; is a JSON array of objects, each with a &#039;name&#039; key, which has the name of the supported command. QMP doesn&#039;t have user documentation yet, this means that, to find out which arguments a command accepts or what&#039;s its output, you will have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
Yes, it&#039;s that low-level.&lt;br /&gt;
&lt;br /&gt;
=== qmp-shell script ===&lt;br /&gt;
&lt;br /&gt;
This script is available under the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP QMP] directory in QEMU&#039;s source-tree. It automates a bit the testing work, as it can construct commands.&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a unix socket, like:&lt;br /&gt;
&lt;br /&gt;
 qemu [...] -qmp unix:./qmp-sock,server&lt;br /&gt;
&lt;br /&gt;
2. Run the script&lt;br /&gt;
&lt;br /&gt;
 qmp-shell ./qmp-sock&lt;br /&gt;
&lt;br /&gt;
3. You should get the following prompt&lt;br /&gt;
&lt;br /&gt;
 (QEMU)&lt;br /&gt;
&lt;br /&gt;
4. Now you can run commands. For example, let&#039;s change the VNC password:&lt;br /&gt;
&lt;br /&gt;
 (QEMU) change device=vnc target=password arg=&#039;1234&#039;&lt;br /&gt;
&lt;br /&gt;
So, it&#039;s needed to name the arguments and the script is not very smart. Again, to find out what arguments a command accepts, you have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
Have fun!&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_block_set_passwd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_add() instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_del() instead&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2930</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2930"/>
		<updated>2010-03-29T18:27:43Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) is a [http://www.json.org/ JSON]-based protocol which allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP&#039;s main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous messages support (ie. events)&lt;br /&gt;
* Capabilities Negotiation&lt;br /&gt;
* Stability (starting with QEMU version 0.13)&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file has a simple introduction and the  [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt full specification] is recommended for application writers.&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12. This means that QMP is still under development and there &#039;&#039;&#039;will&#039;&#039;&#039; be incompatible changes between QEMU 0.12 and QEMU 0.13.&lt;br /&gt;
&lt;br /&gt;
For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: { &amp;quot;QMP&amp;quot;: { &amp;quot;version&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot; }, &amp;quot;capabilities&amp;quot;: [] } }&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: { &amp;quot;return&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;} }&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {}}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Main developers are [mailto:lcapitulino@redhat.com Luiz Capitulino] and [mailto:armbru@redhat.com Markus Armbruster], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands&lt;br /&gt;
* High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Improve internal API, currently it&#039;s too [http://lists.gnu.org/archive/html/qemu-devel/2009-12/msg02537.html low-level]&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_block_set_passwd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_add() instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_del() instead&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Unfortunately, there is no automated tool to test QMP correctness yet. Probably, the right thing to do is to integrate with [http://www.linux-kvm.org/page/KVM-Autotest kvm-autotest] but we still have to think how this should be done.&lt;br /&gt;
&lt;br /&gt;
Meanwhile, QMP testing is a low-level procedure which requires knowledge about the protocol and its implementation, so the first thing to do is to read the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] and [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt spec] files.&lt;br /&gt;
&lt;br /&gt;
This section describes two ways of testing QMP:&lt;br /&gt;
&lt;br /&gt;
* By hand (difficult, only worth it if you&#039;re chasing a specific bug)&lt;br /&gt;
* Using qmp-shell script (automates part of the job)&lt;br /&gt;
&lt;br /&gt;
=== Libvirt ===&lt;br /&gt;
&lt;br /&gt;
1. Install [http://lloyd.github.com/yajl yajl-devel]  before running &#039;autogen.sh&#039;. Make sure the final summary of autogen.sh tells you that it found the yajl library. If you`re running Fedora 12(or above) just yum install yajl-devel.&lt;br /&gt;
&lt;br /&gt;
2. From a fresh checkout of [http://libvirt.org/git/?p=libvirt.git;a=summary GIT master] run the following:&lt;br /&gt;
&lt;br /&gt;
 ./autogen.sh --system --enable-compile-warnings=error&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; The &#039;--system&#039; flag is a shortcut for compiling with the --prefix and other directories matching a system RPM build.&lt;br /&gt;
&lt;br /&gt;
3. Run &#039;make&#039; to build. There is no need to &#039;make install&#039; anything&lt;br /&gt;
especially since that would overwrite your RPM based install&lt;br /&gt;
&lt;br /&gt;
4. As root simply stop the current daemon &amp;amp; start the one you built&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/libvirtd stop&lt;br /&gt;
 $HOME/your/git/checkout/of/libvirt/daemon/libvirtd&lt;br /&gt;
&lt;br /&gt;
5. As root you can use the newly built virsh too&lt;br /&gt;
&lt;br /&gt;
 cd $HOME/your/git/checkout/of/libvirt/src&lt;br /&gt;
 ./virsh &amp;lt;BLAH&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. To enable QMP support, before you build edit &#039;&#039;&#039;src/qemu/qemu_conf.c&#039;&#039;&#039; and find:&lt;br /&gt;
&lt;br /&gt;
 #if 0&lt;br /&gt;
    if (version &amp;gt;= 13000)&lt;br /&gt;
        flags |= QEMUD_CMD_FLAG_MONITOR_JSON;&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; If enabled libvirt will use QMP as default monitor.&lt;br /&gt;
&lt;br /&gt;
7. Change that to an &#039;#if 1&#039;, and change the version to 12000 so it detects your GIT build of QEMU&lt;br /&gt;
&lt;br /&gt;
=== By hand ===&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a TCP socket, so that telnet can be used&lt;br /&gt;
&lt;br /&gt;
 qemu [...] -qmp tcp:localhost:4444,server&lt;br /&gt;
&lt;br /&gt;
2. Now, run telnet&lt;br /&gt;
&lt;br /&gt;
 telnet localhost 4444&lt;br /&gt;
&lt;br /&gt;
3. You should see the following prompt&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
4. Now you can issue commands. To get a list of QMP supported commands, run &#039;&#039;query-commands&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 { &amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; all &amp;quot;info&amp;quot; commands are available under QMP as &amp;quot;query-&amp;quot;, for example &amp;quot;info vnc&amp;quot; is &amp;quot;query-vnc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The output of &#039;&#039;query-commands&#039;&#039; is a JSON array of objects, each with a &#039;name&#039; key, which has the name of the supported command. QMP doesn&#039;t have user documentation yet, this means that, to find out which arguments a command accepts or what&#039;s its output, you will have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
Yes, it&#039;s that low-level.&lt;br /&gt;
&lt;br /&gt;
=== qmp-shell script ===&lt;br /&gt;
&lt;br /&gt;
This script is available under the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP QMP] directory in QEMU&#039;s source-tree. It automates a bit the testing work, as it can construct commands.&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a unix socket, like:&lt;br /&gt;
&lt;br /&gt;
 qemu [...] -qmp unix:./qmp-sock,server&lt;br /&gt;
&lt;br /&gt;
2. Run the script&lt;br /&gt;
&lt;br /&gt;
 qmp-shell ./qmp-sock&lt;br /&gt;
&lt;br /&gt;
3. You should get the following prompt&lt;br /&gt;
&lt;br /&gt;
 (QEMU)&lt;br /&gt;
&lt;br /&gt;
4. Now you can run commands. For example, let&#039;s change the VNC password:&lt;br /&gt;
&lt;br /&gt;
 (QEMU) change device=vnc target=password arg=&#039;1234&#039;&lt;br /&gt;
&lt;br /&gt;
So, it&#039;s needed to name the arguments and the script is not very smart. Again, to find out what arguments a command accepts, you have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
Have fun!&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2929</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2929"/>
		<updated>2010-03-29T18:25:50Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) is a [http://www.json.org/ JSON]-based protocol which allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP&#039;s main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous messages support (ie. events)&lt;br /&gt;
* Capabilities Negotiation&lt;br /&gt;
* Stability (starting QEMU version 0.13)&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file has a simple introduction and the  [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt full specification] is recommended for application writers.&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12. This means that QMP is still under development and there &#039;&#039;&#039;will&#039;&#039;&#039; be incompatible changes between QEMU 0.12 and QEMU 0.13.&lt;br /&gt;
&lt;br /&gt;
For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: { &amp;quot;QMP&amp;quot;: { &amp;quot;version&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot; }, &amp;quot;capabilities&amp;quot;: [] } }&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: { &amp;quot;return&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;} }&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {}}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands&lt;br /&gt;
* High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Improve internal API, currently it&#039;s too [http://lists.gnu.org/archive/html/qemu-devel/2009-12/msg02537.html low-level]&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_block_set_passwd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_add() instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_del() instead&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Unfortunately, there is no automated tool to test QMP correctness yet. Probably, the right thing to do is to integrate with [http://www.linux-kvm.org/page/KVM-Autotest kvm-autotest] but we still have to think how this should be done.&lt;br /&gt;
&lt;br /&gt;
Meanwhile, QMP testing is a low-level procedure which requires knowledge about the protocol and its implementation, so the first thing to do is to read the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] and [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt spec] files.&lt;br /&gt;
&lt;br /&gt;
This section describes two ways of testing QMP:&lt;br /&gt;
&lt;br /&gt;
* By hand (difficult, only worth it if you&#039;re chasing a specific bug)&lt;br /&gt;
* Using qmp-shell script (automates part of the job)&lt;br /&gt;
&lt;br /&gt;
=== Libvirt ===&lt;br /&gt;
&lt;br /&gt;
1. Install [http://lloyd.github.com/yajl yajl-devel]  before running &#039;autogen.sh&#039;. Make sure the final summary of autogen.sh tells you that it found the yajl library. If you`re running Fedora 12(or above) just yum install yajl-devel.&lt;br /&gt;
&lt;br /&gt;
2. From a fresh checkout of [http://libvirt.org/git/?p=libvirt.git;a=summary GIT master] run the following:&lt;br /&gt;
&lt;br /&gt;
 ./autogen.sh --system --enable-compile-warnings=error&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; The &#039;--system&#039; flag is a shortcut for compiling with the --prefix and other directories matching a system RPM build.&lt;br /&gt;
&lt;br /&gt;
3. Run &#039;make&#039; to build. There is no need to &#039;make install&#039; anything&lt;br /&gt;
especially since that would overwrite your RPM based install&lt;br /&gt;
&lt;br /&gt;
4. As root simply stop the current daemon &amp;amp; start the one you built&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/libvirtd stop&lt;br /&gt;
 $HOME/your/git/checkout/of/libvirt/daemon/libvirtd&lt;br /&gt;
&lt;br /&gt;
5. As root you can use the newly built virsh too&lt;br /&gt;
&lt;br /&gt;
 cd $HOME/your/git/checkout/of/libvirt/src&lt;br /&gt;
 ./virsh &amp;lt;BLAH&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. To enable QMP support, before you build edit &#039;&#039;&#039;src/qemu/qemu_conf.c&#039;&#039;&#039; and find:&lt;br /&gt;
&lt;br /&gt;
 #if 0&lt;br /&gt;
    if (version &amp;gt;= 13000)&lt;br /&gt;
        flags |= QEMUD_CMD_FLAG_MONITOR_JSON;&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; If enabled libvirt will use QMP as default monitor.&lt;br /&gt;
&lt;br /&gt;
7. Change that to an &#039;#if 1&#039;, and change the version to 12000 so it detects your GIT build of QEMU&lt;br /&gt;
&lt;br /&gt;
=== By hand ===&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a TCP socket, so that telnet can be used&lt;br /&gt;
&lt;br /&gt;
 qemu [...] -qmp tcp:localhost:4444,server&lt;br /&gt;
&lt;br /&gt;
2. Now, run telnet&lt;br /&gt;
&lt;br /&gt;
 telnet localhost 4444&lt;br /&gt;
&lt;br /&gt;
3. You should see the following prompt&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
4. Now you can issue commands. To get a list of QMP supported commands, run &#039;&#039;query-commands&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 { &amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; all &amp;quot;info&amp;quot; commands are available under QMP as &amp;quot;query-&amp;quot;, for example &amp;quot;info vnc&amp;quot; is &amp;quot;query-vnc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The output of &#039;&#039;query-commands&#039;&#039; is a JSON array of objects, each with a &#039;name&#039; key, which has the name of the supported command. QMP doesn&#039;t have user documentation yet, this means that, to find out which arguments a command accepts or what&#039;s its output, you will have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
Yes, it&#039;s that low-level.&lt;br /&gt;
&lt;br /&gt;
=== qmp-shell script ===&lt;br /&gt;
&lt;br /&gt;
This script is available under the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP QMP] directory in QEMU&#039;s source-tree. It automates a bit the testing work, as it can construct commands.&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a unix socket, like:&lt;br /&gt;
&lt;br /&gt;
 qemu [...] -qmp unix:./qmp-sock,server&lt;br /&gt;
&lt;br /&gt;
2. Run the script&lt;br /&gt;
&lt;br /&gt;
 qmp-shell ./qmp-sock&lt;br /&gt;
&lt;br /&gt;
3. You should get the following prompt&lt;br /&gt;
&lt;br /&gt;
 (QEMU)&lt;br /&gt;
&lt;br /&gt;
4. Now you can run commands. For example, let&#039;s change the VNC password:&lt;br /&gt;
&lt;br /&gt;
 (QEMU) change device=vnc target=password arg=&#039;1234&#039;&lt;br /&gt;
&lt;br /&gt;
So, it&#039;s needed to name the arguments and the script is not very smart. Again, to find out what arguments a command accepts, you have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
Have fun!&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2928</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2928"/>
		<updated>2010-03-29T18:21:37Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) is a [http://www.json.org/ JSON]-based protocol which allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP&#039;s main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous messages support (ie. events)&lt;br /&gt;
* Capabilities Negotiation&lt;br /&gt;
* Stability (starting QEMU version 0.13)&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file has a simple introduction and the  [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt full specification] is recommended for application writers.&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12.&lt;br /&gt;
&lt;br /&gt;
However, QMP is still under development being considered unstable and incomplete. For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: { &amp;quot;QMP&amp;quot;: { &amp;quot;version&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot; }, &amp;quot;capabilities&amp;quot;: [] } }&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: { &amp;quot;return&amp;quot;: { &amp;quot;qemu&amp;quot;: &amp;quot;0.12.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;} }&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {}}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands&lt;br /&gt;
* High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Improve internal API, currently it&#039;s too [http://lists.gnu.org/archive/html/qemu-devel/2009-12/msg02537.html low-level]&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_block_set_passwd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_add() instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_del() instead&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Unfortunately, there is no automated tool to test QMP correctness yet. Probably, the right thing to do is to integrate with [http://www.linux-kvm.org/page/KVM-Autotest kvm-autotest] but we still have to think how this should be done.&lt;br /&gt;
&lt;br /&gt;
Meanwhile, QMP testing is a low-level procedure which requires knowledge about the protocol and its implementation, so the first thing to do is to read the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] and [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt spec] files.&lt;br /&gt;
&lt;br /&gt;
This section describes two ways of testing QMP:&lt;br /&gt;
&lt;br /&gt;
* By hand (difficult, only worth it if you&#039;re chasing a specific bug)&lt;br /&gt;
* Using qmp-shell script (automates part of the job)&lt;br /&gt;
&lt;br /&gt;
=== Libvirt ===&lt;br /&gt;
&lt;br /&gt;
1. Install [http://lloyd.github.com/yajl yajl-devel]  before running &#039;autogen.sh&#039;. Make sure the final summary of autogen.sh tells you that it found the yajl library. If you`re running Fedora 12(or above) just yum install yajl-devel.&lt;br /&gt;
&lt;br /&gt;
2. From a fresh checkout of [http://libvirt.org/git/?p=libvirt.git;a=summary GIT master] run the following:&lt;br /&gt;
&lt;br /&gt;
 ./autogen.sh --system --enable-compile-warnings=error&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; The &#039;--system&#039; flag is a shortcut for compiling with the --prefix and other directories matching a system RPM build.&lt;br /&gt;
&lt;br /&gt;
3. Run &#039;make&#039; to build. There is no need to &#039;make install&#039; anything&lt;br /&gt;
especially since that would overwrite your RPM based install&lt;br /&gt;
&lt;br /&gt;
4. As root simply stop the current daemon &amp;amp; start the one you built&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/libvirtd stop&lt;br /&gt;
 $HOME/your/git/checkout/of/libvirt/daemon/libvirtd&lt;br /&gt;
&lt;br /&gt;
5. As root you can use the newly built virsh too&lt;br /&gt;
&lt;br /&gt;
 cd $HOME/your/git/checkout/of/libvirt/src&lt;br /&gt;
 ./virsh &amp;lt;BLAH&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. To enable QMP support, before you build edit &#039;&#039;&#039;src/qemu/qemu_conf.c&#039;&#039;&#039; and find:&lt;br /&gt;
&lt;br /&gt;
 #if 0&lt;br /&gt;
    if (version &amp;gt;= 13000)&lt;br /&gt;
        flags |= QEMUD_CMD_FLAG_MONITOR_JSON;&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; If enabled libvirt will use QMP as default monitor.&lt;br /&gt;
&lt;br /&gt;
7. Change that to an &#039;#if 1&#039;, and change the version to 12000 so it detects your GIT build of QEMU&lt;br /&gt;
&lt;br /&gt;
=== By hand ===&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a TCP socket, so that telnet can be used&lt;br /&gt;
&lt;br /&gt;
 qemu [...] -qmp tcp:localhost:4444,server&lt;br /&gt;
&lt;br /&gt;
2. Now, run telnet&lt;br /&gt;
&lt;br /&gt;
 telnet localhost 4444&lt;br /&gt;
&lt;br /&gt;
3. You should see the following prompt&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
4. Now you can issue commands. To get a list of QMP supported commands, run &#039;&#039;query-commands&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 { &amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; all &amp;quot;info&amp;quot; commands are available under QMP as &amp;quot;query-&amp;quot;, for example &amp;quot;info vnc&amp;quot; is &amp;quot;query-vnc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The output of &#039;&#039;query-commands&#039;&#039; is a JSON array of objects, each with a &#039;name&#039; key, which has the name of the supported command. QMP doesn&#039;t have user documentation yet, this means that, to find out which arguments a command accepts or what&#039;s its output, you will have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
Yes, it&#039;s that low-level.&lt;br /&gt;
&lt;br /&gt;
=== qmp-shell script ===&lt;br /&gt;
&lt;br /&gt;
This script is available under the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP QMP] directory in QEMU&#039;s source-tree. It automates a bit the testing work, as it can construct commands.&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a unix socket, like:&lt;br /&gt;
&lt;br /&gt;
 qemu [...] -qmp unix:./qmp-sock,server&lt;br /&gt;
&lt;br /&gt;
2. Run the script&lt;br /&gt;
&lt;br /&gt;
 qmp-shell ./qmp-sock&lt;br /&gt;
&lt;br /&gt;
3. You should get the following prompt&lt;br /&gt;
&lt;br /&gt;
 (QEMU)&lt;br /&gt;
&lt;br /&gt;
4. Now you can run commands. For example, let&#039;s change the VNC password:&lt;br /&gt;
&lt;br /&gt;
 (QEMU) change device=vnc target=password arg=&#039;1234&#039;&lt;br /&gt;
&lt;br /&gt;
So, it&#039;s needed to name the arguments and the script is not very smart. Again, to find out what arguments a command accepts, you have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
Have fun!&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2927</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2927"/>
		<updated>2010-03-29T18:16:33Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) is a [http://www.json.org/ JSON]-based protocol which allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP&#039;s main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous messages support (ie. events)&lt;br /&gt;
* Stability (starting QEMU version 0.13)&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file has a simple introduction and the  [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt full specification] is recommended for application writers.&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12.&lt;br /&gt;
&lt;br /&gt;
However, QMP is still under development being considered unstable and incomplete. For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {}}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands&lt;br /&gt;
* High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Improve internal API, currently it&#039;s too [http://lists.gnu.org/archive/html/qemu-devel/2009-12/msg02537.html low-level]&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_block_set_passwd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_add() instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_del() instead&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Unfortunately, there is no automated tool to test QMP correctness yet. Probably, the right thing to do is to integrate with [http://www.linux-kvm.org/page/KVM-Autotest kvm-autotest] but we still have to think how this should be done.&lt;br /&gt;
&lt;br /&gt;
Meanwhile, QMP testing is a low-level procedure which requires knowledge about the protocol and its implementation, so the first thing to do is to read the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] and [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt spec] files.&lt;br /&gt;
&lt;br /&gt;
This section describes two ways of testing QMP:&lt;br /&gt;
&lt;br /&gt;
* By hand (difficult, only worth it if you&#039;re chasing a specific bug)&lt;br /&gt;
* Using qmp-shell script (automates part of the job)&lt;br /&gt;
&lt;br /&gt;
=== Libvirt ===&lt;br /&gt;
&lt;br /&gt;
1. Install [http://lloyd.github.com/yajl yajl-devel]  before running &#039;autogen.sh&#039;. Make sure the final summary of autogen.sh tells you that it found the yajl library. If you`re running Fedora 12(or above) just yum install yajl-devel.&lt;br /&gt;
&lt;br /&gt;
2. From a fresh checkout of [http://libvirt.org/git/?p=libvirt.git;a=summary GIT master] run the following:&lt;br /&gt;
&lt;br /&gt;
 ./autogen.sh --system --enable-compile-warnings=error&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; The &#039;--system&#039; flag is a shortcut for compiling with the --prefix and other directories matching a system RPM build.&lt;br /&gt;
&lt;br /&gt;
3. Run &#039;make&#039; to build. There is no need to &#039;make install&#039; anything&lt;br /&gt;
especially since that would overwrite your RPM based install&lt;br /&gt;
&lt;br /&gt;
4. As root simply stop the current daemon &amp;amp; start the one you built&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/libvirtd stop&lt;br /&gt;
 $HOME/your/git/checkout/of/libvirt/daemon/libvirtd&lt;br /&gt;
&lt;br /&gt;
5. As root you can use the newly built virsh too&lt;br /&gt;
&lt;br /&gt;
 cd $HOME/your/git/checkout/of/libvirt/src&lt;br /&gt;
 ./virsh &amp;lt;BLAH&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. To enable QMP support, before you build edit &#039;&#039;&#039;src/qemu/qemu_conf.c&#039;&#039;&#039; and find:&lt;br /&gt;
&lt;br /&gt;
 #if 0&lt;br /&gt;
    if (version &amp;gt;= 13000)&lt;br /&gt;
        flags |= QEMUD_CMD_FLAG_MONITOR_JSON;&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; If enabled libvirt will use QMP as default monitor.&lt;br /&gt;
&lt;br /&gt;
7. Change that to an &#039;#if 1&#039;, and change the version to 12000 so it detects your GIT build of QEMU&lt;br /&gt;
&lt;br /&gt;
=== By hand ===&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a TCP socket, so that telnet can be used&lt;br /&gt;
&lt;br /&gt;
 qemu [...] -qmp tcp:localhost:4444,server&lt;br /&gt;
&lt;br /&gt;
2. Now, run telnet&lt;br /&gt;
&lt;br /&gt;
 telnet localhost 4444&lt;br /&gt;
&lt;br /&gt;
3. You should see the following prompt&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
4. Now you can issue commands. To get a list of QMP supported commands, run &#039;&#039;query-commands&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 { &amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; all &amp;quot;info&amp;quot; commands are available under QMP as &amp;quot;query-&amp;quot;, for example &amp;quot;info vnc&amp;quot; is &amp;quot;query-vnc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The output of &#039;&#039;query-commands&#039;&#039; is a JSON array of objects, each with a &#039;name&#039; key, which has the name of the supported command. QMP doesn&#039;t have user documentation yet, this means that, to find out which arguments a command accepts or what&#039;s its output, you will have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
Yes, it&#039;s that low-level.&lt;br /&gt;
&lt;br /&gt;
=== qmp-shell script ===&lt;br /&gt;
&lt;br /&gt;
This script is available under the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP QMP] directory in QEMU&#039;s source-tree. It automates a bit the testing work, as it can construct commands.&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a unix socket, like:&lt;br /&gt;
&lt;br /&gt;
 qemu [...] -qmp unix:./qmp-sock,server&lt;br /&gt;
&lt;br /&gt;
2. Run the script&lt;br /&gt;
&lt;br /&gt;
 qmp-shell ./qmp-sock&lt;br /&gt;
&lt;br /&gt;
3. You should get the following prompt&lt;br /&gt;
&lt;br /&gt;
 (QEMU)&lt;br /&gt;
&lt;br /&gt;
4. Now you can run commands. For example, let&#039;s change the VNC password:&lt;br /&gt;
&lt;br /&gt;
 (QEMU) change device=vnc target=password arg=&#039;1234&#039;&lt;br /&gt;
&lt;br /&gt;
So, it&#039;s needed to name the arguments and the script is not very smart. Again, to find out what arguments a command accepts, you have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
Have fun!&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2926</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2926"/>
		<updated>2010-03-29T18:14:35Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) is a [http://www.json.org/ JSON]-based protocol which allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP&#039;s main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous messages support (ie. events)&lt;br /&gt;
* Stability (from QEMU version 0.13)&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it and its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here].&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12.&lt;br /&gt;
&lt;br /&gt;
However, QMP is still under development being considered unstable and incomplete. For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {}}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands&lt;br /&gt;
* High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Improve internal API, currently it&#039;s too [http://lists.gnu.org/archive/html/qemu-devel/2009-12/msg02537.html low-level]&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_block_set_passwd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_add() instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_del() instead&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Unfortunately, there is no automated tool to test QMP correctness yet. Probably, the right thing to do is to integrate with [http://www.linux-kvm.org/page/KVM-Autotest kvm-autotest] but we still have to think how this should be done.&lt;br /&gt;
&lt;br /&gt;
Meanwhile, QMP testing is a low-level procedure which requires knowledge about the protocol and its implementation, so the first thing to do is to read the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] and [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt spec] files.&lt;br /&gt;
&lt;br /&gt;
This section describes two ways of testing QMP:&lt;br /&gt;
&lt;br /&gt;
* By hand (difficult, only worth it if you&#039;re chasing a specific bug)&lt;br /&gt;
* Using qmp-shell script (automates part of the job)&lt;br /&gt;
&lt;br /&gt;
=== Libvirt ===&lt;br /&gt;
&lt;br /&gt;
1. Install [http://lloyd.github.com/yajl yajl-devel]  before running &#039;autogen.sh&#039;. Make sure the final summary of autogen.sh tells you that it found the yajl library. If you`re running Fedora 12(or above) just yum install yajl-devel.&lt;br /&gt;
&lt;br /&gt;
2. From a fresh checkout of [http://libvirt.org/git/?p=libvirt.git;a=summary GIT master] run the following:&lt;br /&gt;
&lt;br /&gt;
 ./autogen.sh --system --enable-compile-warnings=error&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; The &#039;--system&#039; flag is a shortcut for compiling with the --prefix and other directories matching a system RPM build.&lt;br /&gt;
&lt;br /&gt;
3. Run &#039;make&#039; to build. There is no need to &#039;make install&#039; anything&lt;br /&gt;
especially since that would overwrite your RPM based install&lt;br /&gt;
&lt;br /&gt;
4. As root simply stop the current daemon &amp;amp; start the one you built&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/libvirtd stop&lt;br /&gt;
 $HOME/your/git/checkout/of/libvirt/daemon/libvirtd&lt;br /&gt;
&lt;br /&gt;
5. As root you can use the newly built virsh too&lt;br /&gt;
&lt;br /&gt;
 cd $HOME/your/git/checkout/of/libvirt/src&lt;br /&gt;
 ./virsh &amp;lt;BLAH&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. To enable QMP support, before you build edit &#039;&#039;&#039;src/qemu/qemu_conf.c&#039;&#039;&#039; and find:&lt;br /&gt;
&lt;br /&gt;
 #if 0&lt;br /&gt;
    if (version &amp;gt;= 13000)&lt;br /&gt;
        flags |= QEMUD_CMD_FLAG_MONITOR_JSON;&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; If enabled libvirt will use QMP as default monitor.&lt;br /&gt;
&lt;br /&gt;
7. Change that to an &#039;#if 1&#039;, and change the version to 12000 so it detects your GIT build of QEMU&lt;br /&gt;
&lt;br /&gt;
=== By hand ===&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a TCP socket, so that telnet can be used&lt;br /&gt;
&lt;br /&gt;
 qemu [...] -qmp tcp:localhost:4444,server&lt;br /&gt;
&lt;br /&gt;
2. Now, run telnet&lt;br /&gt;
&lt;br /&gt;
 telnet localhost 4444&lt;br /&gt;
&lt;br /&gt;
3. You should see the following prompt&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
4. Now you can issue commands. To get a list of QMP supported commands, run &#039;&#039;query-commands&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 { &amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; all &amp;quot;info&amp;quot; commands are available under QMP as &amp;quot;query-&amp;quot;, for example &amp;quot;info vnc&amp;quot; is &amp;quot;query-vnc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The output of &#039;&#039;query-commands&#039;&#039; is a JSON array of objects, each with a &#039;name&#039; key, which has the name of the supported command. QMP doesn&#039;t have user documentation yet, this means that, to find out which arguments a command accepts or what&#039;s its output, you will have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
Yes, it&#039;s that low-level.&lt;br /&gt;
&lt;br /&gt;
=== qmp-shell script ===&lt;br /&gt;
&lt;br /&gt;
This script is available under the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP QMP] directory in QEMU&#039;s source-tree. It automates a bit the testing work, as it can construct commands.&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a unix socket, like:&lt;br /&gt;
&lt;br /&gt;
 qemu [...] -qmp unix:./qmp-sock,server&lt;br /&gt;
&lt;br /&gt;
2. Run the script&lt;br /&gt;
&lt;br /&gt;
 qmp-shell ./qmp-sock&lt;br /&gt;
&lt;br /&gt;
3. You should get the following prompt&lt;br /&gt;
&lt;br /&gt;
 (QEMU)&lt;br /&gt;
&lt;br /&gt;
4. Now you can run commands. For example, let&#039;s change the VNC password:&lt;br /&gt;
&lt;br /&gt;
 (QEMU) change device=vnc target=password arg=&#039;1234&#039;&lt;br /&gt;
&lt;br /&gt;
So, it&#039;s needed to name the arguments and the script is not very smart. Again, to find out what arguments a command accepts, you have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
Have fun!&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2925</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2925"/>
		<updated>2010-03-29T18:12:40Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) is a [http://www.json.org/ JSON]-based protocol which allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP&#039;s main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous messages support (ie. events)&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it and its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here].&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12.&lt;br /&gt;
&lt;br /&gt;
However, QMP is still under development being considered unstable and incomplete. For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {}}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands&lt;br /&gt;
* High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Improve internal API, currently it&#039;s too [http://lists.gnu.org/archive/html/qemu-devel/2009-12/msg02537.html low-level]&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_block_set_passwd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_add() instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_del() instead&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Unfortunately, there is no automated tool to test QMP correctness yet. Probably, the right thing to do is to integrate with [http://www.linux-kvm.org/page/KVM-Autotest kvm-autotest] but we still have to think how this should be done.&lt;br /&gt;
&lt;br /&gt;
Meanwhile, QMP testing is a low-level procedure which requires knowledge about the protocol and its implementation, so the first thing to do is to read the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] and [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt spec] files.&lt;br /&gt;
&lt;br /&gt;
This section describes two ways of testing QMP:&lt;br /&gt;
&lt;br /&gt;
* By hand (difficult, only worth it if you&#039;re chasing a specific bug)&lt;br /&gt;
* Using qmp-shell script (automates part of the job)&lt;br /&gt;
&lt;br /&gt;
=== Libvirt ===&lt;br /&gt;
&lt;br /&gt;
1. Install [http://lloyd.github.com/yajl yajl-devel]  before running &#039;autogen.sh&#039;. Make sure the final summary of autogen.sh tells you that it found the yajl library. If you`re running Fedora 12(or above) just yum install yajl-devel.&lt;br /&gt;
&lt;br /&gt;
2. From a fresh checkout of [http://libvirt.org/git/?p=libvirt.git;a=summary GIT master] run the following:&lt;br /&gt;
&lt;br /&gt;
 ./autogen.sh --system --enable-compile-warnings=error&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; The &#039;--system&#039; flag is a shortcut for compiling with the --prefix and other directories matching a system RPM build.&lt;br /&gt;
&lt;br /&gt;
3. Run &#039;make&#039; to build. There is no need to &#039;make install&#039; anything&lt;br /&gt;
especially since that would overwrite your RPM based install&lt;br /&gt;
&lt;br /&gt;
4. As root simply stop the current daemon &amp;amp; start the one you built&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/libvirtd stop&lt;br /&gt;
 $HOME/your/git/checkout/of/libvirt/daemon/libvirtd&lt;br /&gt;
&lt;br /&gt;
5. As root you can use the newly built virsh too&lt;br /&gt;
&lt;br /&gt;
 cd $HOME/your/git/checkout/of/libvirt/src&lt;br /&gt;
 ./virsh &amp;lt;BLAH&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. To enable QMP support, before you build edit &#039;&#039;&#039;src/qemu/qemu_conf.c&#039;&#039;&#039; and find:&lt;br /&gt;
&lt;br /&gt;
 #if 0&lt;br /&gt;
    if (version &amp;gt;= 13000)&lt;br /&gt;
        flags |= QEMUD_CMD_FLAG_MONITOR_JSON;&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; If enabled libvirt will use QMP as default monitor.&lt;br /&gt;
&lt;br /&gt;
7. Change that to an &#039;#if 1&#039;, and change the version to 12000 so it detects your GIT build of QEMU&lt;br /&gt;
&lt;br /&gt;
=== By hand ===&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a TCP socket, so that telnet can be used&lt;br /&gt;
&lt;br /&gt;
 qemu [...] -qmp tcp:localhost:4444,server&lt;br /&gt;
&lt;br /&gt;
2. Now, run telnet&lt;br /&gt;
&lt;br /&gt;
 telnet localhost 4444&lt;br /&gt;
&lt;br /&gt;
3. You should see the following prompt&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
4. Now you can issue commands. To get a list of QMP supported commands, run &#039;&#039;query-commands&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 { &amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; all &amp;quot;info&amp;quot; commands are available under QMP as &amp;quot;query-&amp;quot;, for example &amp;quot;info vnc&amp;quot; is &amp;quot;query-vnc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The output of &#039;&#039;query-commands&#039;&#039; is a JSON array of objects, each with a &#039;name&#039; key, which has the name of the supported command. QMP doesn&#039;t have user documentation yet, this means that, to find out which arguments a command accepts or what&#039;s its output, you will have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
Yes, it&#039;s that low-level.&lt;br /&gt;
&lt;br /&gt;
=== qmp-shell script ===&lt;br /&gt;
&lt;br /&gt;
This script is available under the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP QMP] directory in QEMU&#039;s source-tree. It automates a bit the testing work, as it can construct commands.&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a unix socket, like:&lt;br /&gt;
&lt;br /&gt;
 qemu [...] -qmp unix:./qmp-sock,server&lt;br /&gt;
&lt;br /&gt;
2. Run the script&lt;br /&gt;
&lt;br /&gt;
 qmp-shell ./qmp-sock&lt;br /&gt;
&lt;br /&gt;
3. You should get the following prompt&lt;br /&gt;
&lt;br /&gt;
 (QEMU)&lt;br /&gt;
&lt;br /&gt;
4. Now you can run commands. For example, let&#039;s change the VNC password:&lt;br /&gt;
&lt;br /&gt;
 (QEMU) change device=vnc target=password arg=&#039;1234&#039;&lt;br /&gt;
&lt;br /&gt;
So, it&#039;s needed to name the arguments and the script is not very smart. Again, to find out what arguments a command accepts, you have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
Have fun!&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2880</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2880"/>
		<updated>2010-02-09T12:26:52Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it and its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here].&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12.&lt;br /&gt;
&lt;br /&gt;
However, QMP is still under development being considered unstable and incomplete. For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {}}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands&lt;br /&gt;
* High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Improve internal API, currently it&#039;s too [http://lists.gnu.org/archive/html/qemu-devel/2009-12/msg02537.html low-level]&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_block_set_passwd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|legacy, use device_del instead&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_add() instead&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|consider do_netdev_del() instead&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|legacy, use device_add instead&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_chardev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_blockdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|do_netdev_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|to be created&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Unfortunately, there is no automated tool to test QMP correctness yet. Probably, the right thing to do is to integrate with [http://www.linux-kvm.org/page/KVM-Autotest kvm-autotest] but we still have to think how this should be done.&lt;br /&gt;
&lt;br /&gt;
Meanwhile, QMP testing is a low-level procedure which requires knowledge about the protocol and its implementation, so the first thing to do is to read the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] and [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt spec] files.&lt;br /&gt;
&lt;br /&gt;
This section describes two ways of testing QMP:&lt;br /&gt;
&lt;br /&gt;
* By hand (difficult, only worth it if you&#039;re chasing a specific bug)&lt;br /&gt;
* Using qmp-shell script (automates part of the job)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: libvirt should be far easier, describe it!&lt;br /&gt;
&lt;br /&gt;
=== By hand ===&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a TCP socket, so that telnet can be used&lt;br /&gt;
&lt;br /&gt;
 qemu [...] -qmp tcp:localhost:4444,server&lt;br /&gt;
&lt;br /&gt;
2. Now, run telnet&lt;br /&gt;
&lt;br /&gt;
 telnet localhost 4444&lt;br /&gt;
&lt;br /&gt;
3. You should see the following prompt&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
4. Now you can issue commands. To get a list of QMP supported commands, run &#039;&#039;query-commands&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 { &amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; all &amp;quot;info&amp;quot; commands are available under QMP as &amp;quot;query-&amp;quot;, for example &amp;quot;info vnc&amp;quot; is &amp;quot;query-vnc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The output of &#039;&#039;query-commands&#039;&#039; is a JSON array of objects, each with a &#039;name&#039; key, which has the name of the supported command. QMP doesn&#039;t have user documentation yet, this means that, to find out which arguments a command accepts or what&#039;s its output, you will have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
Yes, it&#039;s that low-level.&lt;br /&gt;
&lt;br /&gt;
=== qmp-shell script ===&lt;br /&gt;
&lt;br /&gt;
This script is available under the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP QMP] directory in QEMU&#039;s source-tree. It automates a bit the testing work, as it can construct commands.&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a unix socket, like:&lt;br /&gt;
&lt;br /&gt;
 qemu [...] -qmp unix:./qmp-sock,server&lt;br /&gt;
&lt;br /&gt;
2. Run the script&lt;br /&gt;
&lt;br /&gt;
 qmp-shell ./qmp-sock&lt;br /&gt;
&lt;br /&gt;
3. You should get the following prompt&lt;br /&gt;
&lt;br /&gt;
 (QEMU)&lt;br /&gt;
&lt;br /&gt;
4. Now you can run commands. For example, let&#039;s change the VNC password:&lt;br /&gt;
&lt;br /&gt;
 (QEMU) change device=vnc target=password arg=&#039;1234&#039;&lt;br /&gt;
&lt;br /&gt;
So, it&#039;s needed to name the arguments and the script is not very smart. Again, to find out what arguments a command accepts, you have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
Have fun!&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2783</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2783"/>
		<updated>2010-01-14T12:02:24Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it and its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here].&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12.&lt;br /&gt;
&lt;br /&gt;
However, QMP is still under development being considered unstable and incomplete. For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {}}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands&lt;br /&gt;
* High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Improve internal API, currently it&#039;s too [http://lists.gnu.org/archive/html/qemu-devel/2009-12/msg02537.html low-level]&lt;br /&gt;
* Feature negotiation (?)&lt;br /&gt;
* Asynchronous commands support&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Unfortunately, there is no automated tool to test QMP correctness yet. Probably, the right thing to do is to integrate with [http://www.linux-kvm.org/page/KVM-Autotest kvm-autotest] but we still have to think how this should be done.&lt;br /&gt;
&lt;br /&gt;
Meanwhile, QMP testing is a low-level procedure which requires knowledge about the protocol and its implementation, so the first thing to do is to read the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] and [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt spec] files.&lt;br /&gt;
&lt;br /&gt;
This section describes two ways of testing QMP:&lt;br /&gt;
&lt;br /&gt;
* By hand (difficult, only worth it if you&#039;re chasing a specific bug)&lt;br /&gt;
* Using qmp-shell script (automates part of the job)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: libvirt should be far easier, describe it!&lt;br /&gt;
&lt;br /&gt;
=== By hand ===&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a TCP socket, so that telnet can be used&lt;br /&gt;
&lt;br /&gt;
 qemu [...] -qmp tcp:localhost:4444,server&lt;br /&gt;
&lt;br /&gt;
2. Now, run telnet&lt;br /&gt;
&lt;br /&gt;
 telnet localhost 4444&lt;br /&gt;
&lt;br /&gt;
3. You should see the following prompt&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
4. Now you can issue commands. To get a list of QMP supported commands, run &#039;&#039;query-commands&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 { &amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; all &amp;quot;info&amp;quot; commands are available under QMP as &amp;quot;query-&amp;quot;, for example &amp;quot;info vnc&amp;quot; is &amp;quot;query-vnc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The output of &#039;&#039;query-commands&#039;&#039; is a JSON array of objects, each with a &#039;name&#039; key, which has the name of the supported command. QMP doesn&#039;t have user documentation yet, this means that, to find out which arguments a command accepts or what&#039;s its output, you will have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
Yes, it&#039;s that low-level.&lt;br /&gt;
&lt;br /&gt;
=== qmp-shell script ===&lt;br /&gt;
&lt;br /&gt;
This script is available under the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP QMP] directory in QEMU&#039;s source-tree. It automates a bit the testing work, as it can construct commands.&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a unix socket, like:&lt;br /&gt;
&lt;br /&gt;
 qemu [...] -qmp unix:./qmp-sock,server&lt;br /&gt;
&lt;br /&gt;
2. Run the script&lt;br /&gt;
&lt;br /&gt;
 qmp-shell ./qmp-sock&lt;br /&gt;
&lt;br /&gt;
3. You should get the following prompt&lt;br /&gt;
&lt;br /&gt;
 (QEMU)&lt;br /&gt;
&lt;br /&gt;
4. Now you can run commands. For example, let&#039;s change the VNC password:&lt;br /&gt;
&lt;br /&gt;
 (QEMU) change device=vnc target=password arg=&#039;1234&#039;&lt;br /&gt;
&lt;br /&gt;
So, it&#039;s needed to name the arguments and the script is not very smart. Again, to find out what arguments a command accepts, you have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
Have fun!&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2782</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2782"/>
		<updated>2010-01-14T11:58:07Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it and its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here].&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12.&lt;br /&gt;
&lt;br /&gt;
However, QMP is still under development being considered unstable and incomplete. For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {}}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands&lt;br /&gt;
* High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Improve internal API, currently it&#039;s too [http://lists.gnu.org/archive/html/qemu-devel/2009-12/msg02537.html low-level]&lt;br /&gt;
* Feature negotiation (?)&lt;br /&gt;
* Asynchronous commands support&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Unfortunately, there is no automated tool to test QMP correctness yet. Probably, the right thing to do is to integrate with [http://www.linux-kvm.org/page/KVM-Autotest kvm-autotest] but we still have to think how this should be done.&lt;br /&gt;
&lt;br /&gt;
Meanwhile, QMP testing is a low-level procedure which requires knowledge about the protocol and its implementation, so the first thing to do is to read the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] and [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt spec] files.&lt;br /&gt;
&lt;br /&gt;
This section describes two ways of testing QMP:&lt;br /&gt;
&lt;br /&gt;
* By hand (difficult, only worth it if you&#039;re chasing a specific bug)&lt;br /&gt;
* Using qmp-shell script (automates part of the job)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: libvirt should be far easier, describe it!&lt;br /&gt;
&lt;br /&gt;
=== By hand ===&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a TCP socket, so that telnet can be used&lt;br /&gt;
&lt;br /&gt;
 qemu [...] -qmp tcp:localhost:4444,server&lt;br /&gt;
&lt;br /&gt;
2. Now, run telnet&lt;br /&gt;
&lt;br /&gt;
 telnet localhost 4444&lt;br /&gt;
&lt;br /&gt;
3. You should see the following prompt&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
4. Now you can issue commands. To get a list of QMP supported commands, run &#039;&#039;query-commands&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 { &amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; all &amp;quot;info&amp;quot; commands are available under QMP as &amp;quot;query-&amp;quot;, for example &amp;quot;info vnc&amp;quot; is &amp;quot;query-vnc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The output of &#039;&#039;query-commands&#039;&#039; is a JSON array of objects, each with a &#039;name&#039; key, which has the name of the supported command. QMP doesn&#039;t have user documentation yet, this means that you have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
Yes, it&#039;s that low-level.&lt;br /&gt;
&lt;br /&gt;
=== qmp-shell script ===&lt;br /&gt;
&lt;br /&gt;
This script is available under the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP QMP] directory in QEMU&#039;s source-tree. It automates a bit the testing work, as it can construct commands.&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a unix socket, like:&lt;br /&gt;
&lt;br /&gt;
 qemu [...] -qmp unix:./qmp-sock,server&lt;br /&gt;
&lt;br /&gt;
2. Run the script&lt;br /&gt;
&lt;br /&gt;
 qmp-shell ./qmp-sock&lt;br /&gt;
&lt;br /&gt;
3. You should get the following prompt&lt;br /&gt;
&lt;br /&gt;
 (QEMU)&lt;br /&gt;
&lt;br /&gt;
4. Now you can run commands. For example, let&#039;s change the VNC password:&lt;br /&gt;
&lt;br /&gt;
 (QEMU) change device=vnc target=password arg=&#039;1234&#039;&lt;br /&gt;
&lt;br /&gt;
So, it&#039;s needed to name the arguments and the script is not very smart. Again, to find out what arguments a command accepts, you have to either check the [http://git.savannah.gnu.org/cgit/qemu.git/tree/qemu-monitor.hx qemu-monitor.hx] file and/or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
Have fun!&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2780</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2780"/>
		<updated>2010-01-13T20:06:33Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it and its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here].&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12.&lt;br /&gt;
&lt;br /&gt;
However, QMP is still under development being considered unstable and incomplete. For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {}}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands&lt;br /&gt;
* High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Improve internal API, currently it&#039;s too [http://lists.gnu.org/archive/html/qemu-devel/2009-12/msg02537.html low-level]&lt;br /&gt;
* Feature negotiation (?)&lt;br /&gt;
* Asynchronous commands support&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Unfortunately, there is no automated tool to test QMP correctness yet. Probably, the right thing to do is to integrate it with [http://www.linux-kvm.org/page/KVM-Autotest kvm-autotest] but we still have to think how this should be done.&lt;br /&gt;
&lt;br /&gt;
Meanwhile QMP testing is a low-level procedure which requires knowledge about the protocol and its implementation, so the first thing to do is to read the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] and [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt spec] files.&lt;br /&gt;
&lt;br /&gt;
This section describes two ways of testing QMP:&lt;br /&gt;
&lt;br /&gt;
* By hand (difficult, only worth it if you&#039;re chasing a specific bug)&lt;br /&gt;
* By using qmp-shell script (automates part of the job)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: libvirt should be far easier, describe it!&lt;br /&gt;
&lt;br /&gt;
=== By hand ===&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a TCP socket, so that telnet can be used&lt;br /&gt;
&lt;br /&gt;
 qemu [...] -qmp tcp:localhost:4444,server&lt;br /&gt;
&lt;br /&gt;
2. Now, run telnet&lt;br /&gt;
&lt;br /&gt;
 telnet localhost 4444&lt;br /&gt;
&lt;br /&gt;
3. You should see the following prompt&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
4. Now you can issue commands. To get a list of QMP supported commands, run &#039;&#039;query-commands&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 { &amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; all &amp;quot;info&amp;quot; commands are available under QMP as &amp;quot;query-&amp;quot;, for example &amp;quot;info vnc&amp;quot; is &amp;quot;query-vnc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The output of &#039;&#039;query-commands&#039;&#039; is a JSON array of objects, each with a &#039;name&#039; key, which has the name of the supported command. QMP doesn&#039;t have user documentation yet, this means that you&#039;ll have to check the documentation of the function that implements the command to find out what arguments it accepts.&lt;br /&gt;
&lt;br /&gt;
Yes, it&#039;s that low-level.&lt;br /&gt;
&lt;br /&gt;
=== qmp-shell script ===&lt;br /&gt;
&lt;br /&gt;
This script is available under the QMP directory in QEMU&#039;s source-tree. It automates a bit the testing work, as it can construct commands.&lt;br /&gt;
&lt;br /&gt;
1. Start QMP on a unix socket, like:&lt;br /&gt;
&lt;br /&gt;
 qemu [...] -qmp unix:./qmp-sock,server&lt;br /&gt;
&lt;br /&gt;
2. Run the script&lt;br /&gt;
&lt;br /&gt;
 qmp-shell ./qmp-sock&lt;br /&gt;
&lt;br /&gt;
3. You should get the following prompt&lt;br /&gt;
&lt;br /&gt;
 (QEMU)&lt;br /&gt;
&lt;br /&gt;
4. Now you can run commands. For example, let&#039;s change the VNC password:&lt;br /&gt;
&lt;br /&gt;
 (QEMU) change device=vnc target=password arg=&#039;1234&#039;&lt;br /&gt;
&lt;br /&gt;
So, it&#039;s needed to name the arguments and the script is not very smart. Again, to find out what arguments a command accepts, you have to either check qemu-monitor.hx file or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
Have fun!&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2779</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2779"/>
		<updated>2010-01-13T20:05:30Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it and its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here].&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12.&lt;br /&gt;
&lt;br /&gt;
However, QMP is still under development being considered unstable and incomplete. For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {}}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands&lt;br /&gt;
* High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Improve internal API, currently it&#039;s too [http://lists.gnu.org/archive/html/qemu-devel/2009-12/msg02537.html low-level]&lt;br /&gt;
* Feature negotiation (?)&lt;br /&gt;
* Asynchronous commands support&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Unfortunately, there is no automated tool to test QMP correctness yet. Probably, the right thing to do is to integrate it with [http://www.linux-kvm.org/page/KVM-Autotest kvm-autotest] but we still have to think how this should be done.&lt;br /&gt;
&lt;br /&gt;
Meanwhile QMP testing is a low-level procedure which requires knowledge about the protocol and its implementation, so the first thing to do is to read the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] and [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt spec] files.&lt;br /&gt;
&lt;br /&gt;
This section describes two ways of testing QMP:&lt;br /&gt;
&lt;br /&gt;
* By hand (difficult, only worth it if you&#039;re chasing a specific bug)&lt;br /&gt;
* By using qmp-shell script (automates part of the job)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: libvirt should be far easier, describe it!&lt;br /&gt;
&lt;br /&gt;
=== By hand ===&lt;br /&gt;
&lt;br /&gt;
1. Start QMP in a TCP socket, so that telnet can be used&lt;br /&gt;
&lt;br /&gt;
 qemu [...] -qmp tcp:localhost:4444,server&lt;br /&gt;
&lt;br /&gt;
2. Now, run telnet&lt;br /&gt;
&lt;br /&gt;
 telnet localhost 4444&lt;br /&gt;
&lt;br /&gt;
3. You should see the following prompt&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
4. Now you can issue commands. To get a list of QMP supported commands, run &#039;&#039;&#039;query-commands&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 { &amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; all &amp;quot;info&amp;quot; commands are available under QMP as &amp;quot;query-&amp;quot;, for example &amp;quot;info vnc&amp;quot; is &amp;quot;query-vnc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The output is a JSON array of objects, each with a &#039;name&#039; key, which has the name of the supported command. QMP doesn&#039;t have user documentation yet, this means that you&#039;ll have to check the documentation of the function that implements the command to find out what arguments it accepts.&lt;br /&gt;
&lt;br /&gt;
Yes, it&#039;s that low-level.&lt;br /&gt;
&lt;br /&gt;
=== qmp-shell script ===&lt;br /&gt;
&lt;br /&gt;
This script is available under the QMP directory in QEMU&#039;s source-tree. It automates a bit the testing work, as it can construct commands.&lt;br /&gt;
&lt;br /&gt;
1. Start QMP with a unix socket, like:&lt;br /&gt;
&lt;br /&gt;
 qemu [...] -qmp unix:./qmp-sock,server&lt;br /&gt;
&lt;br /&gt;
2. Run the script&lt;br /&gt;
&lt;br /&gt;
 qmp-shell ./qmp-sock&lt;br /&gt;
&lt;br /&gt;
3. You should get the following prompt&lt;br /&gt;
&lt;br /&gt;
 (QEMU)&lt;br /&gt;
&lt;br /&gt;
4. Now you can run commands. For example, let&#039;s change the VNC password:&lt;br /&gt;
&lt;br /&gt;
 (QEMU) change device=vnc target=password arg=&#039;1234&#039;&lt;br /&gt;
&lt;br /&gt;
So, it&#039;s needed to name the arguments and the script is not that smart. Again, to find out what arguments a command accepts, you have to either check qemu-monitor.hx file or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
Have fun!&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2778</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2778"/>
		<updated>2010-01-13T19:53:31Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it and its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here].&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12.&lt;br /&gt;
&lt;br /&gt;
However, QMP is still under development being considered unstable and incomplete. For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {}}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands&lt;br /&gt;
* High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Improve internal API, currently it&#039;s too [http://lists.gnu.org/archive/html/qemu-devel/2009-12/msg02537.html low-level]&lt;br /&gt;
* Feature negotiation (?)&lt;br /&gt;
* Asynchronous commands support&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Unfortunately, there is no automated tool to test QMP correctness yet. Probably, the right thing to do is to integrate it with kvm-autotest but we still have to think how this should be done.&lt;br /&gt;
&lt;br /&gt;
Meanwhile QMP testing is a low-level procedure which requires some knowledge about the protocol and its implementation, so the first thing to do is to read the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] and [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt spec] files.&lt;br /&gt;
&lt;br /&gt;
This section describes two ways of testing QMP:&lt;br /&gt;
&lt;br /&gt;
* By hand (difficult, only worth it you&#039;re chasing a specific bug)&lt;br /&gt;
* By using qmp-shell script (automates part of the job)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: describe how to run libvirt on top of QMP.&lt;br /&gt;
&lt;br /&gt;
=== By hand ===&lt;br /&gt;
&lt;br /&gt;
1. Start QMP in a TCP socket, so that telnet can be used&lt;br /&gt;
&lt;br /&gt;
 qemu [...] -qmp tcp:localhost:4444,server&lt;br /&gt;
&lt;br /&gt;
2. Now, run telnet&lt;br /&gt;
&lt;br /&gt;
 telnet localhost 4444&lt;br /&gt;
&lt;br /&gt;
3. You should see QMP&#039;s greeting message, this means that it&#039;s read to accept commands&lt;br /&gt;
&lt;br /&gt;
4. Now you can try commands. To get a list of QMP supported commands, run query-commands&lt;br /&gt;
&lt;br /&gt;
 { &amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
The output is a JSON array of objects, each with a &#039;name&#039; key, which has the name of the supported command. QMP doesn&#039;t have user documentation yet, this means that you&#039;ll have to check the documentation of the function that implements the command to find out what arguments it accepts.&lt;br /&gt;
&lt;br /&gt;
Yes, it&#039;s that low-level.&lt;br /&gt;
&lt;br /&gt;
=== qmp-shell script ===&lt;br /&gt;
&lt;br /&gt;
This script is available under the QMP directory in QEMU&#039;s source-tree. It automates a bit the testing work, as it can construct commands.&lt;br /&gt;
&lt;br /&gt;
1. Start QMP with a unix socket, like:&lt;br /&gt;
&lt;br /&gt;
 qemu [...] -qmp unix:./qmp-sock,server&lt;br /&gt;
&lt;br /&gt;
2. Run the script&lt;br /&gt;
&lt;br /&gt;
 qmp-shell ./qmp-sock&lt;br /&gt;
&lt;br /&gt;
3. You should get a prompt&lt;br /&gt;
&lt;br /&gt;
4. Now you can run commands. For example, let&#039;s change the VNC password:&lt;br /&gt;
&lt;br /&gt;
 (qemu) change device=vnc target=password arg=&#039;1234&#039;&lt;br /&gt;
&lt;br /&gt;
So, it&#039;s needed to name the arguments and the script is not that smart. Again, to find out what arguments a command accepts, you have to either check qemu-monitor.hx file or the function which implements the command.&lt;br /&gt;
&lt;br /&gt;
Have fun!&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2777</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2777"/>
		<updated>2010-01-13T19:09:22Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it and its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here].&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12.&lt;br /&gt;
&lt;br /&gt;
However, QMP is still under development being considered unstable and incomplete. For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {}}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands&lt;br /&gt;
* High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Improve internal API, currently it&#039;s too [http://lists.gnu.org/archive/html/qemu-devel/2009-12/msg02537.html low-level]&lt;br /&gt;
* Feature negotiation (?)&lt;br /&gt;
* Asynchronous commands support&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2776</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2776"/>
		<updated>2010-01-13T19:08:11Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it and its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here].&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12.&lt;br /&gt;
&lt;br /&gt;
However, QMP is still under development being considered unstable and incomplete. For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {}}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands&lt;br /&gt;
* High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Improve internal API, currently it&#039;s too [http://lists.gnu.org/archive/html/qemu-devel/2009-12/msg02537.html low-level]&lt;br /&gt;
* Feature negotiation (?)&lt;br /&gt;
* Asynchronous commands support&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2762</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2762"/>
		<updated>2009-12-30T13:57:06Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it and its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here].&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12.&lt;br /&gt;
&lt;br /&gt;
However, QMP is still under development being considered unstable and incomplete. For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: &amp;quot;OK&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands&lt;br /&gt;
* High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Improve internal API, currently it&#039;s too [http://lists.gnu.org/archive/html/qemu-devel/2009-12/msg02537.html low-level]&lt;br /&gt;
* Feature negotiation (?)&lt;br /&gt;
* Asynchronous commands support&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2760</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2760"/>
		<updated>2009-12-29T15:43:43Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it and its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here].&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12.&lt;br /&gt;
&lt;br /&gt;
However, QMP is still under development being considered unstable and incomplete. For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: &amp;quot;OK&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands&lt;br /&gt;
* High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Feature negotiation (?)&lt;br /&gt;
* Asynchronous commands support&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2756</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2756"/>
		<updated>2009-12-29T12:30:03Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it and its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here].&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12.&lt;br /&gt;
&lt;br /&gt;
However, QMP is still under development being considered unstable and incomplete. For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: &amp;quot;OK&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands&lt;br /&gt;
* High-level protocol documentation&lt;br /&gt;
* High-level internal documentation&lt;br /&gt;
* Asynchronous commands support&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2755</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2755"/>
		<updated>2009-12-28T20:06:49Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it and its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here].&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12.&lt;br /&gt;
&lt;br /&gt;
However, QMP is still under development being considered unstable and incomplete. For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: &amp;quot;OK&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039; (master inclusive).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands&lt;br /&gt;
* High-level documentation&lt;br /&gt;
* Asynchronous commands support&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Array-based Monitor&#039;s command table&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2753</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2753"/>
		<updated>2009-12-28T12:40:48Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it and its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here].&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;preview&#039;&#039;&#039; version of QMP is available in QEMU version 0.12.&lt;br /&gt;
&lt;br /&gt;
However, QMP is still under development being considered unstable and incomplete. For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: &amp;quot;OK&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but all QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands&lt;br /&gt;
* High-level documentation&lt;br /&gt;
* Asynchronous commands support&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2751</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2751"/>
		<updated>2009-12-18T19:33:37Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight&lt;br /&gt;
* Text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it and its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here].&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;preview&#039;&#039; version of QMP is available in QEMU version 0.12.&lt;br /&gt;
&lt;br /&gt;
However, QMP is under heavy development being still considered unstable and incomplete. For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: &amp;quot;OK&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but most QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Convert all remaining commands&lt;br /&gt;
* High-level documentation&lt;br /&gt;
* Asynchronous commands support&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2750</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2750"/>
		<updated>2009-12-18T19:31:33Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight&lt;br /&gt;
* Text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it and its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here].&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;preview&#039;&#039; version of QMP is available in QEMU version 0.12.&lt;br /&gt;
&lt;br /&gt;
However, QMP is under heavy development being still considered unstable and incomplete. For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: &amp;quot;OK&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but most QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* High-level documentation&lt;br /&gt;
* Convert all commands&lt;br /&gt;
* Proper error handling support&lt;br /&gt;
* Asynchronous commands support&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2749</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2749"/>
		<updated>2009-12-18T19:28:00Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight&lt;br /&gt;
* Text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it and its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here].&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;preview&#039;&#039; version of QMP is available in QEMU version 0.12.&lt;br /&gt;
&lt;br /&gt;
However, QMP is under heavy development being still considered unstable and incomplete. For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: &amp;quot;OK&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but most QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* High-level documentation&lt;br /&gt;
* Convert all commands&lt;br /&gt;
* Proper error handling support&lt;br /&gt;
* Asynchronous commands support&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2748</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2748"/>
		<updated>2009-12-18T19:25:55Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it and its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here].&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;preview&#039;&#039; version of QMP is available in QEMU version 0.12.&lt;br /&gt;
&lt;br /&gt;
However, QMP is under heavy development being still considered unstable and incomplete. For more information about converted handlers, please check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: &amp;quot;OK&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but most QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* High-level documentation&lt;br /&gt;
* Convert all commands&lt;br /&gt;
* Proper error handling support&lt;br /&gt;
* Asynchronous commands support&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2747</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2747"/>
		<updated>2009-12-17T20:40:03Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it and its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here].&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
QMP is available in QEMU since version 0.13.&lt;br /&gt;
&lt;br /&gt;
However, it is still under development and not all Monitor commands are currently available. For more information, please, check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: &amp;quot;OK&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but most QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* High-level documentation&lt;br /&gt;
* Convert all commands&lt;br /&gt;
* Proper error handling support&lt;br /&gt;
* Asynchronous commands support&lt;br /&gt;
* Better QObjects and QMP debug support&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2746</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2746"/>
		<updated>2009-12-17T12:17:23Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it and its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here].&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
QMP is available in QEMU since version 0.13.&lt;br /&gt;
&lt;br /&gt;
However, it is still under development and not all Monitor commands are currently available. For more information, please, check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: &amp;quot;OK&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but most QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* High-level documentation&lt;br /&gt;
* Convert all commands&lt;br /&gt;
* Proper error handling support&lt;br /&gt;
* Asynchronous commands&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2745</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2745"/>
		<updated>2009-12-16T17:31:47Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it and its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here].&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
QMP is available in QEMU since version 0.13.&lt;br /&gt;
&lt;br /&gt;
However, it is still under development and not all Monitor commands are currently available. For more information, please, check [[#Conversion Status]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: &amp;quot;OK&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but most QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* High-level documentation&lt;br /&gt;
* Convert all commands&lt;br /&gt;
* Proper error handling support&lt;br /&gt;
* Asynchronous commands&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2744</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2744"/>
		<updated>2009-12-16T17:25:35Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
The [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it and its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here].&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
QMP is available in QEMU since version 0.13.&lt;br /&gt;
&lt;br /&gt;
However, it is still under development and not all Monitor commands are currently available.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: &amp;quot;OK&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but most QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* High-level documentation&lt;br /&gt;
* Convert all commands&lt;br /&gt;
* Proper error handling support&lt;br /&gt;
* Asynchronous commands&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2743</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2743"/>
		<updated>2009-12-16T17:19:37Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
Its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here] and the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it.&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
QMP is available in QEMU since version 0.13.&lt;br /&gt;
&lt;br /&gt;
However, it is still under development and not all Monitor commands are currently available.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: &amp;quot;OK&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but most QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* High-level documentation&lt;br /&gt;
* Convert all commands&lt;br /&gt;
* Proper error handling support&lt;br /&gt;
* Asynchronous commands&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2742</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2742"/>
		<updated>2009-12-16T17:17:43Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
Its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here] and the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it.&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
QMP is available in QEMU since version 0.13.&lt;br /&gt;
&lt;br /&gt;
However, it is still under development and not all Monitor commands are currently available.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: &amp;quot;OK&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but most QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* High-level documentation&lt;br /&gt;
* Convert all commands&lt;br /&gt;
* Proper error handling support&lt;br /&gt;
* Asynchronous commands&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion Status ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LAST UPDATED&#039;&#039;&#039;: 2009-12-16&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2741</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2741"/>
		<updated>2009-12-16T17:14:59Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
Its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here] and the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it.&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
QMP is available in QEMU since version 0.13.&lt;br /&gt;
&lt;br /&gt;
However, it is still under development and not all Monitor commands are currently available.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: &amp;quot;OK&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but most QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* High-level documentation&lt;br /&gt;
* Convert all commands&lt;br /&gt;
* Proper error handling support&lt;br /&gt;
* Asynchronous commands&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion status (2009-12-07) ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: merged, but error handling is incomplete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2740</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2740"/>
		<updated>2009-12-16T17:13:32Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
Its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here] and the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it.&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
QMP is available in QEMU since version 0.13.&lt;br /&gt;
&lt;br /&gt;
However, it is still under development and not all Monitor commands are currently available.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: &amp;quot;OK&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but most QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* High-level documentation&lt;br /&gt;
* Convert all commands&lt;br /&gt;
* Proper error handling support&lt;br /&gt;
* Asynchronous commands&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion status (2009-12-07) ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|62&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Converted&lt;br /&gt;
|19&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|30%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: error handling not converted yet&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2739</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2739"/>
		<updated>2009-12-16T17:08:42Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
Its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here] and the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it.&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
QMP is available in QEMU since version 0.13.&lt;br /&gt;
&lt;br /&gt;
However, it is still under development and not all Monitor commands are currently available.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: &amp;quot;OK&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but most QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* High-level documentation&lt;br /&gt;
* Convert all commands&lt;br /&gt;
* Proper error handling support&lt;br /&gt;
* Asynchronous commands&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion status (2009-12-07) ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|61&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Fully Converted&lt;br /&gt;
|7&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|11%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: error handling not converted yet&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|as &#039;query-&#039; commands&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|partial&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2738</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2738"/>
		<updated>2009-12-16T16:45:08Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
Its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here] and the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it.&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
QMP is available in QEMU since version 0.13.&lt;br /&gt;
&lt;br /&gt;
However, it is still under development and not all Monitor commands are currently available.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: &amp;quot;OK&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but most QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* High-level documentation&lt;br /&gt;
* Convert all commands&lt;br /&gt;
* Proper error handling support&lt;br /&gt;
* Asynchronous commands&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion status (2009-12-07) ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|61&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Fully Converted&lt;br /&gt;
|7&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|11%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* never fails: does not need error handling&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Output in QObject&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Error handling&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|TODO: encrypted images&lt;br /&gt;
|-&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|nerver fails&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|converted&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2737</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2737"/>
		<updated>2009-12-16T16:43:19Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
Its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here] and the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it.&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
QMP is available in QEMU since version 0.13.&lt;br /&gt;
&lt;br /&gt;
However, it is still under development and not all Monitor commands are currently available.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: &amp;quot;OK&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but most QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* High-level documentation&lt;br /&gt;
* Convert all commands&lt;br /&gt;
* Proper error handling support&lt;br /&gt;
* Asynchronous commands&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion status (2009-12-07) ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|61&lt;br /&gt;
|36&lt;br /&gt;
|-&lt;br /&gt;
|Fully Converted&lt;br /&gt;
|7&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|11%&lt;br /&gt;
|41%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: not fully converted&lt;br /&gt;
* never fails: does not need error handling&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Output in QObject&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Error handling&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|TODO: encrypted images&lt;br /&gt;
|-&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|nerver fails&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|converted&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|partial&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|partial&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2736</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2736"/>
		<updated>2009-12-16T16:35:54Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
Its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here] and the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it.&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
QMP is available in QEMU since version 0.13.&lt;br /&gt;
&lt;br /&gt;
However, it is still under development and not all Monitor commands are currently available.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: &amp;quot;OK&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but most QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* High-level documentation&lt;br /&gt;
* Convert all commands&lt;br /&gt;
* Proper error handling support&lt;br /&gt;
* Asynchronous commands&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion status (2009-12-07) ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|61&lt;br /&gt;
|35&lt;br /&gt;
|-&lt;br /&gt;
|Fully Converted&lt;br /&gt;
|7&lt;br /&gt;
|14&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|11%&lt;br /&gt;
|40%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: not fully converted&lt;br /&gt;
* never fails: does not need error handling&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Output in QObject&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Error handling&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|TODO: encrypted images&lt;br /&gt;
|-&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|nerver fails&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|converted&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|partial&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|partial&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2735</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2735"/>
		<updated>2009-12-16T16:28:44Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
Its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here] and the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it.&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
QMP is available in QEMU since version 0.13.&lt;br /&gt;
&lt;br /&gt;
However, it is still under development and not all Monitor commands are currently available.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: &amp;quot;OK&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but most QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* High-level documentation&lt;br /&gt;
* Convert all commands&lt;br /&gt;
* Proper error handling support&lt;br /&gt;
* Asynchronous commands&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion status (2009-12-07) ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|61&lt;br /&gt;
|35&lt;br /&gt;
|-&lt;br /&gt;
|Fully Converted&lt;br /&gt;
|7&lt;br /&gt;
|14&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|11%&lt;br /&gt;
|40%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: not fully converted&lt;br /&gt;
* never fails: does not need error handling&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Output in QObject&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Error handling&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|TODO: encrypted images&lt;br /&gt;
|-&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|nerver fails&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|converted&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|converted&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|converted&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|converted&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|converted&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|converted&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|converted&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|converted&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|partial&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|converted&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|partial&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|converted&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|converted&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|converted&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2734</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2734"/>
		<updated>2009-12-16T16:24:49Z</updated>

		<summary type="html">&lt;p&gt;Luizcapitulino: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QEMU Monitor Protocol =&lt;br /&gt;
&lt;br /&gt;
The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU&#039;s Monitor.&lt;br /&gt;
&lt;br /&gt;
QMP is [http://www.json.org/ JSON]-based, its main features are:&lt;br /&gt;
&lt;br /&gt;
* Lightweight, text-based, easy to parse data format&lt;br /&gt;
* Asynchronous events support&lt;br /&gt;
&lt;br /&gt;
Its full specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here] and the [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/README README] file explains how to use it.&lt;br /&gt;
&lt;br /&gt;
== General Status ==&lt;br /&gt;
&lt;br /&gt;
QMP is available in QEMU since version 0.13.&lt;br /&gt;
&lt;br /&gt;
However, it is still under development and not all Monitor commands are currently available.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
In the following examples, &#039;C&#039; stands for &#039;Client&#039; and &#039;S&#039; stands for &#039;Server&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Server Greeting ===&lt;br /&gt;
&lt;br /&gt;
 S: {&amp;quot;QMP&amp;quot;: {&amp;quot;capabilities&amp;quot;: []}}&lt;br /&gt;
&lt;br /&gt;
=== Query version ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;query-version&amp;quot; }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: {&amp;quot;qemu&amp;quot;: &amp;quot;0.11.50&amp;quot;, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Eject a device ===&lt;br /&gt;
&lt;br /&gt;
 C: { &amp;quot;execute&amp;quot;: &amp;quot;eject&amp;quot;, &amp;quot;arguments&amp;quot;: { &amp;quot;device&amp;quot;: &amp;quot;ide1-cd0&amp;quot; } }&lt;br /&gt;
 S: {&amp;quot;return&amp;quot;: &amp;quot;OK&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
Primary contact is [mailto:lcapitulino@redhat.com Luiz Capitulino], but most QMP-related discussions happen on the [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
Next features, hot fixes and other patches are stored in the QMP unstable repository:&lt;br /&gt;
&lt;br /&gt;
http://repo.or.cz/w/qemu/qmp-unstable.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: all branches in this repository are constantly &#039;&#039;rebased&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* High-level documentation&lt;br /&gt;
* Convert all commands&lt;br /&gt;
* Proper error handling support&lt;br /&gt;
* Asynchronous commands&lt;br /&gt;
* Libqmp&lt;br /&gt;
&lt;br /&gt;
== Conversion status (2009-12-07) ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|Command&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
|Handlers&lt;br /&gt;
|61&lt;br /&gt;
|35&lt;br /&gt;
|-&lt;br /&gt;
|Fully Converted&lt;br /&gt;
|7&lt;br /&gt;
|14&lt;br /&gt;
|-&lt;br /&gt;
|Percentage&lt;br /&gt;
|11%&lt;br /&gt;
|40%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following tables have a per-function status. There is one table for &#039;&#039;command&#039;&#039; handlers and another one for &#039;&#039;info&#039;&#039; handlers.&lt;br /&gt;
&lt;br /&gt;
Status can be:&lt;br /&gt;
&lt;br /&gt;
* merged: already merged upstream&lt;br /&gt;
* converted: converted but not merged yet&lt;br /&gt;
* partial: not fully converted&lt;br /&gt;
* never fails: does not need error handling&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Handlers used by [http://libvirt.org Libvirt] are marked with yellow.&lt;br /&gt;
&lt;br /&gt;
==== Command handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Output in QObject&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Error handling&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_policy()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_reset()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_acl_show()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_boot_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_change()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_closefd()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_commit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_cont()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|TODO: encrypted images&lt;br /&gt;
|-&lt;br /&gt;
|do_cpu_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_delvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_device_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_eject()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_gdbserver()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_getfd()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_help_cmd()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_mce()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_inject_nmi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_read()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_ioport_write()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_loadvm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_log()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_logfile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_migrate_cancel()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_migrate_set_downtime()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_migrate_set_speed()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_button()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_move()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_mouse_set()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_device_hot_remove()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_physical_memory_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_physical_memory_save()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_print()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_quit()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_savevm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_screen_dump()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sendkey()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_set_link()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_singlestep()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_stop()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_stop_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_sum()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_system_powerdown()&lt;br /&gt;
|merged&lt;br /&gt;
|nerver fails&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_system_reset()&lt;br /&gt;
|merged&lt;br /&gt;
|never fails&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_usb_del()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_watchdog_action()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_wav_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|drive_hot_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|net_host_device_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_add()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|net_slirp_hostfwd_remove()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|pci_device_hot_add()&lt;br /&gt;
|converted&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Info handlers ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Handler name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Status&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Comments&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info()&lt;br /&gt;
|converted&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|bdrv_info_stats()&lt;br /&gt;
|converted&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_balloon()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_capture()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_cpus()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_cpu_stats()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_history()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_hpet()&lt;br /&gt;
|converted&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_jit()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_kvm()&lt;br /&gt;
|converted&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_mice()&lt;br /&gt;
|converted&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_info_migrate()&lt;br /&gt;
|converted&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_name()&lt;br /&gt;
|converted&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_network()&lt;br /&gt;
|partial&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_numa()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_profile()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qdm()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_qtree()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_registers()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_roms()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_snapshots()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_status()&lt;br /&gt;
|converted&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_usernet()&lt;br /&gt;
|partial&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_uuid()&lt;br /&gt;
|converted&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_version()&lt;br /&gt;
|merged&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|do_info_vnc()&lt;br /&gt;
|converted&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|irq_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|mem_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pci_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pcmcia_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|pic_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|qemu_chr_info()&lt;br /&gt;
|converted&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tlb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_host_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|usb_info()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links:&lt;br /&gt;
&lt;br /&gt;
* http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html&lt;br /&gt;
* http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html&lt;/div&gt;</summary>
		<author><name>Luizcapitulino</name></author>
	</entry>
</feed>