Paolo Bonzini 9eb80eadd4 qmp: add pull_event function há 13 anos atrás
..
README 4cdbc094ca QMP: Drop vm-info example script há 14 anos atrás
qemu-ga-client f513cbf750 Add qemu-ga-client script há 13 anos atrás
qmp 1c1d46cc0b qmp: add test tool for QMP há 13 anos atrás
qmp-events.txt a66a2a3683 block: introduce BLOCK_JOB_READY event há 13 anos atrás
qmp-shell fa779b65fa Add support for pretty-printing response in qmp-shell há 13 anos atrás
qmp-spec.txt de253f1491 qmp: switch to the new error format on the wire há 13 anos atrás
qmp.py 9eb80eadd4 qmp: add pull_event function há 13 anos atrás
qom-fuse 5ade767485 qom: quick and dirty QOM filesystem based on FUSE há 13 anos atrás
qom-get 235fe3bfd4 qom: add test tools há 13 anos atrás
qom-list 235fe3bfd4 qom: add test tools há 13 anos atrás
qom-set 235fe3bfd4 qom: add test tools há 13 anos atrás

README

QEMU Monitor Protocol
=====================

Introduction
-------------

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

QMP is JSON[1] based and currently has the following features:

- Lightweight, text-based, easy to parse data format
- Asynchronous messages support (ie. events)
- Capabilities Negotiation

For detailed information on QMP's usage, please, refer to the following files:

o qmp-spec.txt QEMU Monitor Protocol current specification
o qmp-commands.txt QMP supported commands (auto-generated at build-time)
o qmp-events.txt List of available asynchronous events

There is also a simple Python script called 'qmp-shell' available.

IMPORTANT: It's strongly recommended to read the 'Stability Considerations'
section in the qmp-commands.txt file before making any serious use of QMP.


[1] http://www.json.org

Usage
-----

To enable QMP, you need a QEMU monitor instance in "control mode". There are
two ways of doing this.

The simplest one is using the '-qmp' command-line option. The following
example makes QMP available on localhost port 4444:

$ qemu [...] -qmp tcp:localhost:4444,server

However, in order to have more complex combinations, like multiple monitors,
the '-mon' command-line option should be used along with the '-chardev' one.
For instance, the following example creates one user monitor on stdio and one
QMP monitor on localhost port 4444.

$ qemu [...] -chardev stdio,id=mon0 -mon chardev=mon0,mode=readline \
-chardev socket,id=mon1,host=localhost,port=4444,server \
-mon chardev=mon1,mode=control

Please, refer to QEMU's manpage for more information.

Simple Testing
--------------

To manually test QMP one can connect with telnet and issue commands by hand:

$ telnet localhost 4444
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
{"QMP": {"version": {"qemu": {"micro": 50, "minor": 13, "major": 0}, "package": ""}, "capabilities": []}}
{ "execute": "qmp_capabilities" }
{"return": {}}
{ "execute": "query-version" }
{"return": {"qemu": {"micro": 50, "minor": 13, "major": 0}, "package": ""}}

Development Process
-------------------

When changing QMP's interface (by adding new commands, events or modifying
existing ones) it's mandatory to update the relevant documentation, which is
one (or more) of the files listed in the 'Introduction' section*.

Also, it's strongly recommended to send the documentation patch first, before
doing any code change. This is so because:

1. Avoids the code dictating the interface

2. Review can improve your interface. Letting that happen before
you implement it can save you work.

* The qmp-commands.txt file is generated from the qmp-commands.hx one, which
is the file that should be edited.

Homepage
--------

http://wiki.qemu.org/QMP