<?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=MarkusArmbruster</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=MarkusArmbruster"/>
	<link rel="alternate" type="text/html" href="https://linux-kvm.org/page/Special:Contributions/MarkusArmbruster"/>
	<updated>2026-04-21T13:32:56Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.5</generator>
	<entry>
		<id>https://linux-kvm.org/index.php?title=Main_Page&amp;diff=4595</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=Main_Page&amp;diff=4595"/>
		<updated>2012-11-12T14:29:05Z</updated>

		<summary type="html">&lt;p&gt;MarkusArmbruster: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Kernel Based Virtual Machine ==&lt;br /&gt;
&lt;br /&gt;
KVM (for Kernel-based Virtual Machine) is a full virtualization solution for Linux on x86 hardware containing virtualization extensions (Intel VT or AMD-V). It consists of a loadable kernel module, kvm.ko, that provides the core virtualization infrastructure and a processor specific module, kvm-intel.ko or kvm-amd.ko. KVM also requires a modified QEMU although work is underway to get the required changes upstream. &lt;br /&gt;
&lt;br /&gt;
Using KVM, one can run multiple virtual machines running unmodified Linux or Windows images. Each virtual machine has private virtualized hardware: a network card, disk, graphics adapter, etc.&lt;br /&gt;
&lt;br /&gt;
The kernel component of KVM is included in mainline Linux, as of 2.6.20.&lt;br /&gt;
&lt;br /&gt;
KVM is open source software.&lt;br /&gt;
&lt;br /&gt;
== Common Pages ==&lt;br /&gt;
{| style=&amp;quot;border:none&amp;quot;&lt;br /&gt;
|style=&amp;quot;width:50%;border:none;&amp;quot;|&lt;br /&gt;
* [[KVM Forum]]&lt;br /&gt;
** [[KVM Forum 2012]]&lt;br /&gt;
** [[KVM Forum 2011]]&lt;br /&gt;
** [[KVM Forum 2010]]&lt;br /&gt;
** [[KVM Forum 2008]]&lt;br /&gt;
** [[KVM Forum 2007]]&lt;br /&gt;
* Linux Plumbers Conference&lt;br /&gt;
** [[LinuxPlumbers2010|LPC 2010]]&lt;br /&gt;
** [[LPC 2012]]&lt;br /&gt;
* [[TODO]]&lt;br /&gt;
* [[KVM-Autotest]]&lt;br /&gt;
* [[KVM Features]]&lt;br /&gt;
|style=&amp;quot;width:50%;border:none;&amp;quot;|&lt;br /&gt;
* [[Management Tools]]&lt;br /&gt;
* [[Documents]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Common External Pages ==&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;border:none&amp;quot;&lt;br /&gt;
|style=&amp;quot;width:50%;border:none;&amp;quot;|&lt;br /&gt;
* [http://www.qemu.org/ QEMU]&lt;br /&gt;
* [http://wiki.xensource.com/xenwiki/HVM_Compatible_Processors Xen&#039;s HVM Compatible Processors List]&lt;br /&gt;
|style=&amp;quot;width:50%;border:none;&amp;quot;|&lt;br /&gt;
* [http://qemu-buch.de Book &amp;quot;qemu-kvm &amp;amp; libvirt&amp;quot;]&lt;br /&gt;
* [http://qemu-buch.de/cgi-bin/moin.cgi/ QEMU Wiki]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MarkusArmbruster</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2988</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2988"/>
		<updated>2010-05-18T16:36:33Z</updated>

		<summary type="html">&lt;p&gt;MarkusArmbruster: &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 &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;
|- style=&amp;quot;background-color:khaki;&amp;quot;&lt;br /&gt;
|do_info_network()&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>MarkusArmbruster</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2987</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2987"/>
		<updated>2010-05-18T15:53:03Z</updated>

		<summary type="html">&lt;p&gt;MarkusArmbruster: &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 &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;
|&lt;br /&gt;
|&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;
|- style=&amp;quot;background-color:khaki;&amp;quot;&lt;br /&gt;
|do_info_network()&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>MarkusArmbruster</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2986</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2986"/>
		<updated>2010-05-18T15:50:36Z</updated>

		<summary type="html">&lt;p&gt;MarkusArmbruster: &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 &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;
|&lt;br /&gt;
|&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;
|&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&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;
|- style=&amp;quot;background-color:khaki;&amp;quot;&lt;br /&gt;
|do_info_network()&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>MarkusArmbruster</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2984</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2984"/>
		<updated>2010-05-14T11:09:13Z</updated>

		<summary type="html">&lt;p&gt;MarkusArmbruster: libvirt wants info snapshot&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 &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;
|&lt;br /&gt;
|&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;
|&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;
|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;
|- style=&amp;quot;background-color:khaki;&amp;quot;&lt;br /&gt;
|do_info_network()&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>MarkusArmbruster</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2979</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2979"/>
		<updated>2010-05-12T14:15:40Z</updated>

		<summary type="html">&lt;p&gt;MarkusArmbruster: Update libvirt&amp;#039;s use of info&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 &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;
|&lt;br /&gt;
|&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;
|&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;
|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;
|- style=&amp;quot;background-color:khaki;&amp;quot;&lt;br /&gt;
|do_info_network()&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;
|-&lt;br /&gt;
|do_info_snapshots()&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_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>MarkusArmbruster</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2978</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2978"/>
		<updated>2010-05-12T14:02:45Z</updated>

		<summary type="html">&lt;p&gt;MarkusArmbruster: Update info conversion status&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 &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;
|&lt;br /&gt;
|&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;
|&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;
|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;
|- 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;
|-&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;
|-&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;
|[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;
|-&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;
|- style=&amp;quot;background-color:yellow;&amp;quot;&lt;br /&gt;
|do_pci_info()&lt;br /&gt;
|merged&lt;br /&gt;
|0.12.50&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;
|-&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>MarkusArmbruster</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2977</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2977"/>
		<updated>2010-05-12T13:20:38Z</updated>

		<summary type="html">&lt;p&gt;MarkusArmbruster: Cover commands only in qemu-kvm&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 &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;
|&lt;br /&gt;
|&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;
|&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;
|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;
|- 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;
| [http://wiki.qemu.org/Google_Summer_of_Code_2010/QMP Being worked on in SoC]&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>MarkusArmbruster</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2976</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2976"/>
		<updated>2010-05-12T13:14:47Z</updated>

		<summary type="html">&lt;p&gt;MarkusArmbruster: Update command conversion status&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 &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_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;
|&lt;br /&gt;
|&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;
|&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;
|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;
|- 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;
| [http://wiki.qemu.org/Google_Summer_of_Code_2010/QMP Being worked on in SoC]&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>MarkusArmbruster</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2970</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2970"/>
		<updated>2010-05-03T08:28:23Z</updated>

		<summary type="html">&lt;p&gt;MarkusArmbruster: Update libvirt&amp;#039;s use of commands&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 &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_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;
|- 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;
|- 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;
|&lt;br /&gt;
|&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;
|&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;
| [http://wiki.qemu.org/Google_Summer_of_Code_2010/QMP Being worked on in SoC]&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>MarkusArmbruster</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2923</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2923"/>
		<updated>2010-03-23T07:45:13Z</updated>

		<summary type="html">&lt;p&gt;MarkusArmbruster: &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;
* 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>MarkusArmbruster</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2871</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2871"/>
		<updated>2010-02-05T15:41:32Z</updated>

		<summary type="html">&lt;p&gt;MarkusArmbruster: &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_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>MarkusArmbruster</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2845</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2845"/>
		<updated>2010-02-04T07:44:05Z</updated>

		<summary type="html">&lt;p&gt;MarkusArmbruster: &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_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;
|&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;
|&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>MarkusArmbruster</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2843</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2843"/>
		<updated>2010-02-03T09:43:57Z</updated>

		<summary type="html">&lt;p&gt;MarkusArmbruster: &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_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;
|converted&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;
|converted&lt;br /&gt;
|&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;
|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;
|&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>MarkusArmbruster</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=StableABI&amp;diff=2827</id>
		<title>StableABI</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=StableABI&amp;diff=2827"/>
		<updated>2010-01-28T16:16:22Z</updated>

		<summary type="html">&lt;p&gt;MarkusArmbruster: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Stable Guest ABI =&lt;br /&gt;
&lt;br /&gt;
Allow guest virtual machines to be presented with the same ABI across QEMU upgrades.&lt;br /&gt;
&lt;br /&gt;
= Detailed =&lt;br /&gt;
== Why is it useful? ==&lt;br /&gt;
&lt;br /&gt;
Changing guest ABI can confuse or break guests.&lt;br /&gt;
&lt;br /&gt;
This is particularly relevant for Windows guests where a guest ABI change may require Windows installs to be reactivated. &lt;br /&gt;
&lt;br /&gt;
== How to run ==&lt;br /&gt;
&lt;br /&gt;
libvirt takes care of it.&lt;br /&gt;
&lt;br /&gt;
== How to test ==&lt;br /&gt;
== Potential migration issues ==&lt;br /&gt;
== Backward/forward compatibility issues ==&lt;br /&gt;
== Specific issues with some releases ==&lt;br /&gt;
&lt;br /&gt;
= Test cases =&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
&lt;br /&gt;
For additional information, see [https://fedoraproject.org/wiki/Features/KVM_Stable_Guest_ABI Features/KVM Stable Guest ABI] and&lt;br /&gt;
[https://fedoraproject.org/wiki/Features/KVM_Stable_PCI_Addresses Features/KVM Stable PCI Addresses]&lt;br /&gt;
on the [https://fedoraproject.org/wiki/Fedora_Project_Wiki Fedora Project Wiki].&lt;/div&gt;</summary>
		<author><name>MarkusArmbruster</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2798</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2798"/>
		<updated>2010-01-19T17:02:18Z</updated>

		<summary type="html">&lt;p&gt;MarkusArmbruster: &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_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;
|converted&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+converted&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;
|converted&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;
|converted&lt;br /&gt;
|&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+converted&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>MarkusArmbruster</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2795</id>
		<title>MonitorProtocol</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=MonitorProtocol&amp;diff=2795"/>
		<updated>2010-01-19T15:29:20Z</updated>

		<summary type="html">&lt;p&gt;MarkusArmbruster: &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;
|posted&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+posted&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+posted&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>MarkusArmbruster</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=Qdev_status&amp;diff=2721</id>
		<title>Qdev status</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=Qdev_status&amp;diff=2721"/>
		<updated>2009-12-15T13:04:00Z</updated>

		<summary type="html">&lt;p&gt;MarkusArmbruster: Update for v0.12.0-rc2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= qdev Status =&lt;br /&gt;
&lt;br /&gt;
qdev is a QEMU-internal API for device configuration and creation. It&#039;s the machinery that makes -device and device_add / device_del possible.  Devices are being converted to qdev, and qdev evolves along with that.  This page tracks how far we got, and what&#039;s still left to do.&lt;br /&gt;
&lt;br /&gt;
=== Host/guest split ===&lt;br /&gt;
&lt;br /&gt;
* Drives done&lt;br /&gt;
** Host side: -drive if=none,id=&amp;lt;name&amp;gt;,&amp;lt;parameters&amp;gt;&lt;br /&gt;
** Guest side: -device virtio-blk-pci,drive=&amp;lt;name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Character devices done&lt;br /&gt;
** Host side: -chardev pty,id=&amp;lt;name&amp;gt;&lt;br /&gt;
** Guest side: -device isa-serial,chardev=&amp;lt;name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* NICs done&lt;br /&gt;
** Host side: -netdev type=tap,id=&amp;lt;name&amp;gt;,fd=&amp;lt;tapfd&amp;gt;&lt;br /&gt;
** Guest side: -device virtio-net-pci,netdev=&amp;lt;name&amp;gt;&lt;br /&gt;
** Note that -netdev doesn&#039;t support VLANs&lt;br /&gt;
&lt;br /&gt;
=== PC driver conversion status ===&lt;br /&gt;
&lt;br /&gt;
* PIC, APIC, CPUs, memory not converted&lt;br /&gt;
* i440FX/PIIX3 done (host bridge, ISA bridge, USB, IDE) except for ACPI (PIIX3 function 3)&lt;br /&gt;
&lt;br /&gt;
* ISA FDC, PS/2 keyboard &amp;amp; mouse, RTC, serial, parallel done&lt;br /&gt;
&lt;br /&gt;
* VGA done (all variants, ISA &amp;amp; PCI), but doesn&#039;t work, because it needs to be initialized before i440fx_init_memory_mappings() runs.&lt;br /&gt;
&lt;br /&gt;
* NICs done, but see &amp;quot;default optional devices&amp;quot; below&lt;br /&gt;
&lt;br /&gt;
* Audio done, except for a few rarely used ISA devices&lt;br /&gt;
&lt;br /&gt;
* Virtio done, except virtio-console still needs chardev hooked up (Amit&#039;s working on it as part of vmchannel)&lt;br /&gt;
&lt;br /&gt;
* SCSI done&lt;br /&gt;
&lt;br /&gt;
* USB HID (tablet, mouse, keyboard), storage, hub, host (pass-through), serial, braille done&lt;br /&gt;
* USB net patch posted&lt;br /&gt;
* USB bt (Bluetooth) not converted&lt;br /&gt;
* No way to ensure stable USB addresses&lt;br /&gt;
&lt;br /&gt;
* IDE disks done, but see &amp;quot;default optional devices&amp;quot; below&lt;br /&gt;
&lt;br /&gt;
* Watchdogs done&lt;br /&gt;
&lt;br /&gt;
* Bluetooth not converted&lt;br /&gt;
&lt;br /&gt;
* Option ROMs done&lt;br /&gt;
&lt;br /&gt;
=== Default optional devices ===&lt;br /&gt;
&lt;br /&gt;
QEMU creates a bunch of optional devices (NIC, CD-ROM, VGA, ...). They get automatically suppressed when you specify your own with -device &amp;amp; friends.  Except NIC and CD-ROM (ide.1/master) don&#039;t.  Work-around: suppress all optional devices with -nodefaults.&lt;br /&gt;
&lt;br /&gt;
=== Configuration file ===&lt;br /&gt;
&lt;br /&gt;
qdev options (and many others) can be read from a configuration file. -FOO VAR=&amp;quot;VAL&amp;quot; becomes&lt;br /&gt;
    [FOO]&lt;br /&gt;
    VAR = &amp;quot;VAL&amp;quot;&lt;br /&gt;
Option -readconfig FILE reads configuration from FILE, and -writeconfig FILE writes the current configuration to FILE.  Needs more testing.&lt;br /&gt;
&lt;br /&gt;
=== Hot plug ===&lt;br /&gt;
&lt;br /&gt;
device_add / device_del are on par with -device: Any device you can create with -device you can hot-plug with device_add / device_del.  As long as it&#039;s hot-pluggable, of course.&lt;br /&gt;
&lt;br /&gt;
drive_add is on par with -drive.  May still need drive_del.&lt;br /&gt;
&lt;br /&gt;
Still need equivalents to -chardev and future -netdev (what drive_add is to -drive).&lt;br /&gt;
&lt;br /&gt;
Nice to have, perhaps: info config like -writeconfig.&lt;br /&gt;
&lt;br /&gt;
=== Resources ===&lt;br /&gt;
&lt;br /&gt;
Gerd&#039;s [http://repo.or.cz/w/qemu/kraxel.git git tree]&lt;/div&gt;</summary>
		<author><name>MarkusArmbruster</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=Qdev_status&amp;diff=2702</id>
		<title>Qdev status</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=Qdev_status&amp;diff=2702"/>
		<updated>2009-11-24T14:02:11Z</updated>

		<summary type="html">&lt;p&gt;MarkusArmbruster: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= qdev Status =&lt;br /&gt;
&lt;br /&gt;
qdev is a QEMU-internal API for device configuration and creation. It&#039;s the machinery that makes -device and device_add / device_del possible.  Devices are being converted to qdev, and qdev evolves along with that.  This page tracks how far we got, and what&#039;s still left to do.&lt;br /&gt;
&lt;br /&gt;
=== Host/guest split ===&lt;br /&gt;
&lt;br /&gt;
* Drives done&lt;br /&gt;
** Host side: -drive if=none,id=&amp;lt;name&amp;gt;,&amp;lt;parameters&amp;gt;&lt;br /&gt;
** Guest side: -device virtio-blk-pci,drive=&amp;lt;name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Character devices done&lt;br /&gt;
** Host side: -chardev pty,id=&amp;lt;name&amp;gt;&lt;br /&gt;
** Guest side: -device isa-serial,chardev=&amp;lt;name&amp;gt;&lt;br /&gt;
** A few small issues remain, e.g. -device isa-serial still requires -serial none to work.  See &amp;quot;default optional devices&amp;quot; below.&lt;br /&gt;
&lt;br /&gt;
* NICs done&lt;br /&gt;
** Host side: -netdev type=tap,id=&amp;lt;name&amp;gt;,fd=&amp;lt;tapfd&amp;gt;&lt;br /&gt;
** Guest side: -device virtio-net-pci,netdev=&amp;lt;name&amp;gt;&lt;br /&gt;
** Note that -netdev doesn&#039;t support VLANs&lt;br /&gt;
&lt;br /&gt;
=== PC driver conversion status ===&lt;br /&gt;
&lt;br /&gt;
* PIC, APIC, CPUs, memory not converted&lt;br /&gt;
* i440FX/PIIX3 done (host bridge, ISA bridge, USB, IDE) except for ACPI (PIIX3 function 3)&lt;br /&gt;
&lt;br /&gt;
* ISA FDC, PS/2 keyboard &amp;amp; mouse, RTC, serial, parallel done&lt;br /&gt;
&lt;br /&gt;
* VGA done (all variants, ISA &amp;amp; PCI), but:&lt;br /&gt;
** Still requires -vga none, see &amp;quot;default optional devices&amp;quot; below.&lt;br /&gt;
** Doesn&#039;t work, because it needs to be initialized before i440fx_init_memory_mappings() runs.&lt;br /&gt;
&lt;br /&gt;
* NICs done, but see &amp;quot;default optional devices&amp;quot; below&lt;br /&gt;
&lt;br /&gt;
* Audio done, except for a few rarely used ISA devices&lt;br /&gt;
&lt;br /&gt;
* Virtio done, except virtio-console still needs chardev hooked up (Amit&#039;s working on it as part of vmchannel)&lt;br /&gt;
&lt;br /&gt;
* SCSI done&lt;br /&gt;
&lt;br /&gt;
* USB HID (tablet, mouse, keyboard), storage, hub, host (pass-through), serial, braille done&lt;br /&gt;
* USB net patch posted&lt;br /&gt;
* USB bt (Bluetooth) not converted&lt;br /&gt;
* No way to ensure stable USB addresses&lt;br /&gt;
&lt;br /&gt;
* IDE disks done, but see &amp;quot;default optional devices&amp;quot; below&lt;br /&gt;
&lt;br /&gt;
* Watchdogs done&lt;br /&gt;
&lt;br /&gt;
* Bluetooth not converted&lt;br /&gt;
&lt;br /&gt;
* Option ROMs done&lt;br /&gt;
&lt;br /&gt;
=== Default optional devices ===&lt;br /&gt;
&lt;br /&gt;
QEMU creates a bunch of optional devices (NIC, CD-ROM, VGA, ...).  Some of them can be suppressed, some not.  Default devices get in the way when you work with -device &amp;amp; friends.  For instance, ide1/master is untouchable, because QEMU insists on putting a CD-ROM there.  Patch posted.&lt;br /&gt;
&lt;br /&gt;
=== Configuration file ===&lt;br /&gt;
&lt;br /&gt;
qdev options (and many others) can be read from a configuration file. -FOO VAR=&amp;quot;VAL&amp;quot; becomes&lt;br /&gt;
    [FOO]&lt;br /&gt;
    VAR = &amp;quot;VAL&amp;quot;&lt;br /&gt;
Option -readconfig FILE reads configuration from FILE, and -writeconfig FILE writes the current configuration to FILE.  Needs more testing.&lt;br /&gt;
&lt;br /&gt;
=== Hot plug ===&lt;br /&gt;
&lt;br /&gt;
device_add / device_del are on par with -device: Any device you can create with -device you can hot-plug with device_add / device_del.  As long as it&#039;s hot-pluggable, of course.&lt;br /&gt;
&lt;br /&gt;
drive_add is on par with -drive.  May still need drive_del.&lt;br /&gt;
&lt;br /&gt;
Still need equivalents to -chardev and future -netdev (what drive_add is to -drive).&lt;br /&gt;
&lt;br /&gt;
Nice to have, perhaps: info config like -writeconfig.&lt;br /&gt;
&lt;br /&gt;
=== Resources ===&lt;br /&gt;
&lt;br /&gt;
Gerd&#039;s [http://repo.or.cz/w/qemu/kraxel.git git tree]&lt;/div&gt;</summary>
		<author><name>MarkusArmbruster</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=Qdev_status&amp;diff=2640</id>
		<title>Qdev status</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=Qdev_status&amp;diff=2640"/>
		<updated>2009-10-26T12:19:08Z</updated>

		<summary type="html">&lt;p&gt;MarkusArmbruster: NIC host/guest split update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= qdev Status =&lt;br /&gt;
&lt;br /&gt;
qdev is a QEMU-internal API for device configuration and creation. It&#039;s the machinery that makes -device and device_add / device_del possible.  Devices are being converted to qdev, and qdev evolves along with that.  This page tracks how far we got, and what&#039;s still left to do.&lt;br /&gt;
&lt;br /&gt;
=== Host/guest split ===&lt;br /&gt;
&lt;br /&gt;
* Drives done&lt;br /&gt;
** Host side: -drive if=none,id=&amp;lt;name&amp;gt;,&amp;lt;parameters&amp;gt;&lt;br /&gt;
** Guest side: -device virtio-blk-pci,drive=&amp;lt;name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Character devices done&lt;br /&gt;
** Host side: -chardev pty,id=&amp;lt;name&amp;gt;&lt;br /&gt;
** Guest side: -device isa-serial,chardev=&amp;lt;name&amp;gt;&lt;br /&gt;
** A few small issues remain, e.g. -device isa-serial still requires -serial none to work.  See &amp;quot;default optional devices&amp;quot; below.&lt;br /&gt;
&lt;br /&gt;
* NICs done&lt;br /&gt;
** Host side: -netdev type=tap,id=&amp;lt;name&amp;gt;,fd=&amp;lt;tapfd&amp;gt;&lt;br /&gt;
** Guest side: -device virtio-net-pci,netdev=&amp;lt;name&amp;gt;&lt;br /&gt;
** Note that -netdev doesn&#039;t support VLANs&lt;br /&gt;
&lt;br /&gt;
=== PC driver conversion status ===&lt;br /&gt;
&lt;br /&gt;
* PIC, APIC, CPUs, memory not converted&lt;br /&gt;
* i440FX/PIIX3 done (host bridge, ISA bridge, USB, IDE) except for ACPI (PIIX3 function 3)&lt;br /&gt;
&lt;br /&gt;
* ISA FDC, PS/2 keyboard &amp;amp; mouse, RTC, serial, parallel done&lt;br /&gt;
* Working on nicer defaults for -device serial and parallel&lt;br /&gt;
&lt;br /&gt;
* VGA done (all variants, ISA &amp;amp; PCI), except for ROMs (see &amp;quot;option ROMs&amp;quot; below)&lt;br /&gt;
&lt;br /&gt;
* NICs partly converted, missing are host/guest split (see above) and boot ROMs (see &amp;quot;option ROMs&amp;quot; below)&lt;br /&gt;
&lt;br /&gt;
* Audio done, except for a few rarely used ISA devices&lt;br /&gt;
&lt;br /&gt;
* Virtio done, except virtio-console still needs chardev hooked up (Amit&#039;s working on it as part of vmchannel)&lt;br /&gt;
&lt;br /&gt;
* SCSI done&lt;br /&gt;
&lt;br /&gt;
* USB HID (tablet, mouse, keyboard), storage, hub done.&lt;br /&gt;
* USB serial, net, host (pass-through) serial partly converted.&lt;br /&gt;
&lt;br /&gt;
* IDE disks done, but see &amp;quot;default optional devices&amp;quot; below&lt;br /&gt;
&lt;br /&gt;
* Watchdogs done&lt;br /&gt;
&lt;br /&gt;
* Bluetooth not converted&lt;br /&gt;
&lt;br /&gt;
* Option ROMs not done, but getting very close&lt;br /&gt;
&lt;br /&gt;
=== Default optional devices ===&lt;br /&gt;
&lt;br /&gt;
QEMU creates a bunch of optional devices (NIC, CD-ROM, VGA, ...).  Some of them can be suppressed, some not.  Default devices get in the way when you work with -device &amp;amp; friends.  For instance, ide1/master is untouchable, because QEMU insists on putting a CD-ROM there.  Being discussed upstream.&lt;br /&gt;
&lt;br /&gt;
=== Hot plug ===&lt;br /&gt;
&lt;br /&gt;
device_add / device_del are on par with -device: Any device you can create with -device you can hot-plug with device_add / device_del.  As long as it&#039;s hot-pluggable, of course.&lt;br /&gt;
&lt;br /&gt;
drive_add is on par with -drive.  May still need drive_del.&lt;br /&gt;
&lt;br /&gt;
Still need equivalents to -chardev and future -netdev (what drive_add is to -drive).&lt;br /&gt;
&lt;br /&gt;
=== Resources ===&lt;br /&gt;
&lt;br /&gt;
Gerd&#039;s [http://repo.or.cz/w/qemu/kraxel.git git tree]&lt;/div&gt;</summary>
		<author><name>MarkusArmbruster</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=Qdev_status&amp;diff=2626</id>
		<title>Qdev status</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=Qdev_status&amp;diff=2626"/>
		<updated>2009-10-22T16:42:34Z</updated>

		<summary type="html">&lt;p&gt;MarkusArmbruster: Fix typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= qdev Status =&lt;br /&gt;
&lt;br /&gt;
qdev is a QEMU-internal API for device configuration and creation. It&#039;s the machinery that makes -device and device_add / device_del possible.  Devices are being converted to qdev, and qdev evolves along with that.  This page tracks how far we got, and what&#039;s still left to do.&lt;br /&gt;
&lt;br /&gt;
=== Host/guest split ===&lt;br /&gt;
&lt;br /&gt;
* Drives done&lt;br /&gt;
** Host side: -drive if=none,id=&amp;lt;name&amp;gt;,&amp;lt;parameters&amp;gt;&lt;br /&gt;
** Guest side: -device virtio-blk-pci,drive=&amp;lt;name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Character devices done&lt;br /&gt;
** Host side: -chardev pty,id=&amp;lt;name&amp;gt;&lt;br /&gt;
** Guest side: -device isa-serial,chardev=&amp;lt;name&amp;gt;&lt;br /&gt;
** A few small issues remain, e.g. -device isa-serial still requires -serial none to work.  See &amp;quot;default optional devices&amp;quot; below.&lt;br /&gt;
&lt;br /&gt;
* NICs are still in RFC stage.  Gerd and Mark posted patches for discussion.   Mark proposed -netdev, similar in spirit to -chardev.&lt;br /&gt;
&lt;br /&gt;
=== PC driver conversion status ===&lt;br /&gt;
&lt;br /&gt;
* PIC, APIC, CPUs, memory not converted&lt;br /&gt;
* i440FX/PIIX3 done (host bridge, ISA bridge, USB, IDE) except for ACPI (PIIX3 function 3)&lt;br /&gt;
&lt;br /&gt;
* ISA FDC, PS/2 keyboard &amp;amp; mouse, RTC, serial, parallel done&lt;br /&gt;
* Working on nicer defaults for -device serial and parallel&lt;br /&gt;
&lt;br /&gt;
* VGA done (all variants, ISA &amp;amp; PCI), except for ROMs (see &amp;quot;option ROMs&amp;quot; below)&lt;br /&gt;
&lt;br /&gt;
* NICs partly converted, missing are host/guest split (see above) and boot ROMs (see &amp;quot;option ROMs&amp;quot; below)&lt;br /&gt;
&lt;br /&gt;
* Audio done, except for a few rarely used ISA devices&lt;br /&gt;
&lt;br /&gt;
* Virtio done, except virtio-console still needs chardev hooked up (Amit&#039;s working on it as part of vmchannel)&lt;br /&gt;
&lt;br /&gt;
* SCSI done&lt;br /&gt;
&lt;br /&gt;
* USB HID (tablet, mouse, keyboard), storage, hub done.&lt;br /&gt;
* USB serial, net, host (pass-through) serial partly converted.&lt;br /&gt;
&lt;br /&gt;
* IDE disks done, but see &amp;quot;default optional devices&amp;quot; below&lt;br /&gt;
&lt;br /&gt;
* Watchdogs done&lt;br /&gt;
&lt;br /&gt;
* Bluetooth not converted&lt;br /&gt;
&lt;br /&gt;
* Option ROMs not done, but getting very close&lt;br /&gt;
&lt;br /&gt;
=== Default optional devices ===&lt;br /&gt;
&lt;br /&gt;
QEMU creates a bunch of optional devices (NIC, CD-ROM, VGA, ...).  Some of them can be suppressed, some not.  Default devices get in the way when you work with -device &amp;amp; friends.  For instance, ide1/master is untouchable, because QEMU insists on putting a CD-ROM there.  Being discussed upstream.&lt;br /&gt;
&lt;br /&gt;
=== Hot plug ===&lt;br /&gt;
&lt;br /&gt;
device_add / device_del are on par with -device: Any device you can create with -device you can hot-plug with device_add / device_del.  As long as it&#039;s hot-pluggable, of course.&lt;br /&gt;
&lt;br /&gt;
drive_add is on par with -drive.  May still need drive_del.&lt;br /&gt;
&lt;br /&gt;
Still need equivalents to -chardev and future -netdev (what drive_add is to -drive).&lt;br /&gt;
&lt;br /&gt;
=== Resources ===&lt;br /&gt;
&lt;br /&gt;
Gerd&#039;s [http://repo.or.cz/w/qemu/kraxel.git git tree]&lt;/div&gt;</summary>
		<author><name>MarkusArmbruster</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=Qdev_status&amp;diff=2623</id>
		<title>Qdev status</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=Qdev_status&amp;diff=2623"/>
		<updated>2009-10-21T12:02:29Z</updated>

		<summary type="html">&lt;p&gt;MarkusArmbruster: qdev status as of 2009-10-14&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= qdev Status =&lt;br /&gt;
&lt;br /&gt;
qdev is a QEMU-internal API for device configuration and creation. It&#039;s the machinery that makes -device and device_add / device_del possible.  Devices are being converted to qdev, and qdev evolves along with that.  This page tracks how far we got, and what&#039;s still left to do.&lt;br /&gt;
&lt;br /&gt;
=== Host/guest split ===&lt;br /&gt;
&lt;br /&gt;
* Drives done&lt;br /&gt;
** Host side: -drive if=none,id=&amp;lt;name&amp;gt;,&amp;lt;parameters&amp;gt;&lt;br /&gt;
** Guest side: -device virtio-blk-pci,drive=&amp;lt;name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Character devices done&lt;br /&gt;
** Host side: -chardev pty,id=&amp;lt;name&amp;gt;&lt;br /&gt;
** Guest side: -device isa-serial,chr=&amp;lt;name&amp;gt;&lt;br /&gt;
** A few small issues remain, e.g. -device isa-serial still requires -serial none to work.  See &amp;quot;default optional devices&amp;quot; below.&lt;br /&gt;
&lt;br /&gt;
* NICs are still in RFC stage.  Gerd and Mark posted patches for discussion.   Mark proposed -netdev, similar in spirit to -chardev.&lt;br /&gt;
&lt;br /&gt;
=== PC driver conversion status ===&lt;br /&gt;
&lt;br /&gt;
* PIC, APIC, CPUs, memory not converted&lt;br /&gt;
* i440FX/PIIX3 done (host bridge, ISA bridge, USB, IDE) except for ACPI (PIIX3 function 3)&lt;br /&gt;
&lt;br /&gt;
* ISA FDC, PS/2 keyboard &amp;amp; mouse, RTC, serial, parallel done&lt;br /&gt;
* Working on nicer defaults for -device serial and parallel&lt;br /&gt;
&lt;br /&gt;
* VGA done (all variants, ISA &amp;amp; PCI), except for ROMs (see &amp;quot;option ROMs&amp;quot; below)&lt;br /&gt;
&lt;br /&gt;
* NICs partly converted, missing are host/guest split (see above) and boot ROMs (see &amp;quot;option ROMs&amp;quot; below)&lt;br /&gt;
&lt;br /&gt;
* Audio done, except for a few rarely used ISA devices&lt;br /&gt;
&lt;br /&gt;
* Virtio done, except virtio-console still needs chardev hooked up (Amit&#039;s working on it as part of vmchannel)&lt;br /&gt;
&lt;br /&gt;
* SCSI done&lt;br /&gt;
&lt;br /&gt;
* USB HID (tablet, mouse, keyboard), storage, hub done.&lt;br /&gt;
* USB serial, net, host (pass-through) serial partly converted.&lt;br /&gt;
&lt;br /&gt;
* IDE disks done, but see &amp;quot;default optional devices&amp;quot; below&lt;br /&gt;
&lt;br /&gt;
* Watchdogs done&lt;br /&gt;
&lt;br /&gt;
* Bluetooth not converted&lt;br /&gt;
&lt;br /&gt;
* Option ROMs not done, but getting very close&lt;br /&gt;
&lt;br /&gt;
=== Default optional devices ===&lt;br /&gt;
&lt;br /&gt;
QEMU creates a bunch of optional devices (NIC, CD-ROM, VGA, ...).  Some of them can be suppressed, some not.  Default devices get in the way when you work with -device &amp;amp; friends.  For instance, ide1/master is untouchable, because QEMU insists on putting a CD-ROM there.  Being discussed upstream.&lt;br /&gt;
&lt;br /&gt;
=== Hot plug ===&lt;br /&gt;
&lt;br /&gt;
device_add / device_del are on par with -device: Any device you can create with -device you can hot-plug with device_add / device_del.  As long as it&#039;s hot-pluggable, of course.&lt;br /&gt;
&lt;br /&gt;
drive_add is on par with -drive.  May still need drive_del.&lt;br /&gt;
&lt;br /&gt;
Still need equivalents to -chardev and future -netdev (what drive_add is to -drive).&lt;br /&gt;
&lt;br /&gt;
=== Resources ===&lt;br /&gt;
&lt;br /&gt;
Gerd&#039;s [http://repo.or.cz/w/qemu/kraxel.git git tree]&lt;/div&gt;</summary>
		<author><name>MarkusArmbruster</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=Bugs&amp;diff=2374</id>
		<title>Bugs</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=Bugs&amp;diff=2374"/>
		<updated>2009-07-09T21:10:30Z</updated>

		<summary type="html">&lt;p&gt;MarkusArmbruster: Fix markup&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Bugs=&lt;br /&gt;
&lt;br /&gt;
You can submit bug reports either through the sourceforge [http://sourceforge.net/tracker/?atid=893831&amp;amp;group_id=180599&amp;amp;func=browse bug tracker] or directly to the [mailto:kvm@vger.kernel.org mailing list] (no need to subscribe).  Bugs submitted through the bug tracker show up on the list as well.            &lt;br /&gt;
&lt;br /&gt;
== Submitting a bug report ==&lt;br /&gt;
&lt;br /&gt;
When submitting a bug report, make sure to provide the following information:&lt;br /&gt;
&lt;br /&gt;
* what cpu model (examples: Intel Core Duo, Intel Core 2 Duo, AMD Opteron 2210).  See /proc/cpuinfo if you&#039;re not sure.                                                                                           &lt;br /&gt;
* what kvm version you are using.  If you&#039;re using git directly, provide the output of &#039;git describe&#039;.   &lt;br /&gt;
* the host kernel version                                                                                &lt;br /&gt;
* what host kernel arch you are using (i386 or x86_64)                                                   &lt;br /&gt;
* what guest you are using, including OS type (Linux, Windows, Solaris, etc.), bitness (32 or 64), kernel version                                                                                                 &lt;br /&gt;
* the qemu command line you are using to start the guest                                                 &lt;br /&gt;
* whether the problem goes away if using the &amp;lt;code&amp;gt;-no-kvm-irqchip&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;-no-kvm-pit&amp;lt;/code&amp;gt; switch.                                                                                                     &lt;br /&gt;
* whether the problem also appears with the &amp;lt;code&amp;gt;-no-kvm&amp;lt;/code&amp;gt; switch.                                 &lt;br /&gt;
&lt;br /&gt;
Please use the latest release version of kvm at the time you submit the bug.  Even if you use kvm from a distribution (Ubuntu starting from Feisty or Fedora starting from 7), it is important to use the latest sources.&lt;br /&gt;
&lt;br /&gt;
In case qemu-kvm exits with SIGSEGV (Segmentation fault) or SIGBUS (Bus error), please make sure ulimit is configured so that a core file can be generated (ulimit -a to report, ulimit -c unlimited to allow unlimited size core files). Then get a backtrace of the error with&lt;br /&gt;
&lt;br /&gt;
(gdb) info threads&lt;br /&gt;
&lt;br /&gt;
And for every thread present do:&lt;br /&gt;
&lt;br /&gt;
(gdb) thread n &lt;br /&gt;
&lt;br /&gt;
(gdb) bt&lt;br /&gt;
&lt;br /&gt;
Attach the output to the bug report.&lt;br /&gt;
&lt;br /&gt;
== Getting a serial console from the guest ==&lt;br /&gt;
&lt;br /&gt;
If a guest crashes on boot, it is sometimes useful to have its console output.  This can be done using&lt;br /&gt;
qemu&#039;s -serial option to emulate a serial port:&lt;br /&gt;
 qemu-system-x86_64 -serial file:serial.log&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Depending on the guest OS you will need to do some additional changes to instruct it to use the serial port as a console as shown below :&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
Change the guest kernel&#039;s command line (in the GRUB or LILO menu) to include the string &lt;br /&gt;
 console=ttyS0,115200&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If after a crash, there is still no output in the serial.log file and the guest kernel was configured touse a serial console; chances are that the crash was too early in the process to have the console initialized and then the following kernel command line should be used additionally (only to be used as a last resort as it interacts badly with the console boot parameter)&lt;br /&gt;
 earlyprintk=serial,ttyS0,115200&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OpenSolaris ===&lt;br /&gt;
&lt;br /&gt;
Change the guest kernel&#039;s entry in the GRUB menu to include the string &lt;br /&gt;
 -B console=ttya&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if there is already a -B option just add the console parameter to it after a comma &amp;quot;,&amp;quot; and beware that since this will redirect the console to the file you&#039;ll need to tail the serial.log file to see it boot asthere will be no output in the SDL console and you won&#039;t be able to interact with it through the keyboard.&lt;/div&gt;</summary>
		<author><name>MarkusArmbruster</name></author>
	</entry>
</feed>