|  | 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 |