|  | QEMU Monitor Protocol Draft Specification - Version 0.1 | 
|  |  | 
|  | 1. Introduction | 
|  | =============== | 
|  |  | 
|  | This document specifies the QEMU Monitor Protocol (QMP), a JSON-based protocol | 
|  | which is available for applications to control QEMU at the machine-level. | 
|  |  | 
|  | To enable QMP support, QEMU has to be run in "control mode". This is done by | 
|  | starting QEMU with the appropriate command-line options. Please, refer to the | 
|  | QEMU manual page for more information. | 
|  |  | 
|  | 2. Protocol Specification | 
|  | ========================= | 
|  |  | 
|  | This section details the protocol format. For the purpose of this document | 
|  | "Client" is any application which is communicating with QEMU in control mode, | 
|  | and "Server" is QEMU itself. | 
|  |  | 
|  | JSON data structures, when mentioned in this document, are always in the | 
|  | following format: | 
|  |  | 
|  | json-DATA-STRUCTURE-NAME | 
|  |  | 
|  | Where DATA-STRUCTURE-NAME is any valid JSON data structure, as defined by | 
|  | the JSON standard: | 
|  |  | 
|  | http://www.ietf.org/rfc/rfc4627.txt | 
|  |  | 
|  | For convenience, json-objects mentioned in this document will have its members | 
|  | in a certain order. However, in real protocol usage json-objects members can | 
|  | be in ANY order, thus no particular order should be assumed. | 
|  |  | 
|  | 2.1 General Definitions | 
|  | ----------------------- | 
|  |  | 
|  | 2.1.1 All interactions transmitted by the Server are json-objects, always | 
|  | terminating with CRLF | 
|  |  | 
|  | 2.1.2 All json-objects members are mandatory when not specified otherwise | 
|  |  | 
|  | 2.2 Server Greeting | 
|  | ------------------- | 
|  |  | 
|  | Right when connected the Server will issue a greeting message, which signals | 
|  | that the connection has been successfully established and that the Server is | 
|  | waiting for commands. | 
|  |  | 
|  | The format is: | 
|  |  | 
|  | { "QMP": { "capabilities": json-array } } | 
|  |  | 
|  | Where, | 
|  |  | 
|  | - The "capabilities" member specify the availability of features beyond the | 
|  | baseline specification | 
|  |  | 
|  | 2.3 Issuing Commands | 
|  | -------------------- | 
|  |  | 
|  | The format for command execution is: | 
|  |  | 
|  | { "execute": json-string, "arguments": json-object, "id": json-value } | 
|  |  | 
|  | Where, | 
|  |  | 
|  | - The "execute" member identifies the command to be executed by the Server | 
|  | - The "arguments" member is used to pass any arguments required for the | 
|  | execution of the command, it is optional when no arguments are required | 
|  | - The "id" member is a transaction identification associated with the | 
|  | command execution, it is optional and will be part of the response if | 
|  | provided | 
|  |  | 
|  | 2.4 Commands Responses | 
|  | ---------------------- | 
|  |  | 
|  | There are two possible responses which the Server will issue as the result | 
|  | of a command execution: success or error. | 
|  |  | 
|  | 2.4.1 success | 
|  | ------------- | 
|  |  | 
|  | The success response is issued when the command execution has finished | 
|  | without errors. | 
|  |  | 
|  | The format is: | 
|  |  | 
|  | { "return": json-value, "id": json-value } | 
|  |  | 
|  | Where, | 
|  |  | 
|  | - The "return" member contains the command returned data, which is defined | 
|  | in a per-command basis or "OK" if the command does not return data | 
|  | - The "id" member contains the transaction identification associated | 
|  | with the command execution (if issued by the Client) | 
|  |  | 
|  | 2.4.2 error | 
|  | ----------- | 
|  |  | 
|  | The error response is issued when the command execution could not be | 
|  | completed because of an error condition. | 
|  |  | 
|  | The format is: | 
|  |  | 
|  | { "error": { "class": json-string, "data": json-value }, "id": json-value } | 
|  |  | 
|  | Where, | 
|  |  | 
|  | - The "class" member contains the error class name (eg. "ServiceUnavailable") | 
|  | - The "data" member contains specific error data and is defined in a | 
|  | per-command basis, it will be an empty json-object if the error has no data | 
|  | - The "id" member contains the transaction identification associated with | 
|  | the command execution (if issued by the Client) | 
|  |  | 
|  | NOTE: Some errors can occur before the Server is able to read the "id" member, | 
|  | in these cases the "id" member will not be part of the error response, even | 
|  | if provided by the client. | 
|  |  | 
|  | 2.5 Asynchronous events | 
|  | ----------------------- | 
|  |  | 
|  | As a result of state changes, the Server may send messages unilaterally | 
|  | to the Client at any time. They are called 'asynchronous events'. | 
|  |  | 
|  | The format is: | 
|  |  | 
|  | { "event": json-string, "data": json-value, | 
|  | "timestamp": { "seconds": json-number, "microseconds": json-number } } | 
|  |  | 
|  | Where, | 
|  |  | 
|  | - The "event" member contains the event's name | 
|  | - The "data" member contains event specific data, which is defined in a | 
|  | per-event basis, it is optional | 
|  | - The "timestamp" member contains the exact time of when the event ocurred | 
|  | in the Server. It is a fixed json-object with time in seconds and | 
|  | microseconds | 
|  |  | 
|  | For a listing of supported asynchronous events, please, refer to the | 
|  | qmp-events.txt file. | 
|  |  | 
|  | 3. QMP Examples | 
|  | =============== | 
|  |  | 
|  | This section provides some examples of real QMP usage, in all of them | 
|  | 'C' stands for 'Client' and 'S' stands for 'Server'. | 
|  |  | 
|  | 3.1 Server greeting | 
|  | ------------------- | 
|  |  | 
|  | S: {"QMP": {"capabilities": []}} | 
|  |  | 
|  | 3.2 Simple 'stop' execution | 
|  | --------------------------- | 
|  |  | 
|  | C: { "execute": "stop" } | 
|  | S: {"return": "OK"} | 
|  |  | 
|  | 3.3 KVM information | 
|  | ------------------- | 
|  |  | 
|  | C: {"execute": "query-kvm", "id": "example"} | 
|  | S: {"return": "enabled", "id": "example"} | 
|  |  | 
|  | 3.4 Parsing error | 
|  | ------------------ | 
|  |  | 
|  | C: { "execute": } | 
|  | S: {"error": {"class": "JSONParsing", "data": {}}} | 
|  |  | 
|  | 3.5 Powerdown event | 
|  | ------------------- | 
|  |  | 
|  | S: {"timestamp": {"seconds": 1258551470, "microseconds": 802384}, "event": | 
|  | "POWERDOWN"} | 
|  |  | 
|  | 4. Notes to Client implementors | 
|  | ------------------------------- | 
|  |  | 
|  | 4.1 It is recommended to always start the Server in pause mode, thus the | 
|  | Client is able to perform any setup procedure without the risk of | 
|  | race conditions and related problems | 
|  |  | 
|  | 4.2 It is recommended to always check the capabilities json-array, issued | 
|  | with the greeting message, at connection time | 
|  |  | 
|  | 4.3 Json-objects or json-arrays mentioned in this document are not fixed | 
|  | and no particular size or number of members/elements should be assumed. | 
|  | New members/elements can be added at any time. | 
|  |  | 
|  | 4.4 No particular order of json-objects members should be assumed, they | 
|  | can change at any time |