1 QEMU Monitor Protocol Specification - Version 0.1 2 31. Introduction 4=============== 5 6This document specifies the QEMU Monitor Protocol (QMP), a JSON-based protocol 7which is available for applications to control QEMU at the machine-level. 8 9To enable QMP support, QEMU has to be run in "control mode". This is done by 10starting QEMU with the appropriate command-line options. Please, refer to the 11QEMU manual page for more information. 12 132. Protocol Specification 14========================= 15 16This section details the protocol format. For the purpose of this document 17"Client" is any application which is communicating with QEMU in control mode, 18and "Server" is QEMU itself. 19 20JSON data structures, when mentioned in this document, are always in the 21following format: 22 23 json-DATA-STRUCTURE-NAME 24 25Where DATA-STRUCTURE-NAME is any valid JSON data structure, as defined by 26the JSON standard: 27 28http://www.ietf.org/rfc/rfc4627.txt 29 30For convenience, json-object members and json-array elements mentioned in 31this document will be in a certain order. However, in real protocol usage 32they can be in ANY order, thus no particular order should be assumed. 33 342.1 General Definitions 35----------------------- 36 372.1.1 All interactions transmitted by the Server are json-objects, always 38 terminating with CRLF 39 402.1.2 All json-objects members are mandatory when not specified otherwise 41 422.2 Server Greeting 43------------------- 44 45Right when connected the Server will issue a greeting message, which signals 46that the connection has been successfully established and that the Server is 47ready for capabilities negotiation (for more information refer to section 48'4. Capabilities Negotiation'). 49 50The format is: 51 52{ "QMP": { "version": json-object, "capabilities": json-array } } 53 54 Where, 55 56- The "version" member contains the Server's version information (the format 57 is the same of the 'query-version' command) 58- The "capabilities" member specify the availability of features beyond the 59 baseline specification 60 612.3 Issuing Commands 62-------------------- 63 64The format for command execution is: 65 66{ "execute": json-string, "arguments": json-object, "id": json-value } 67 68 Where, 69 70- The "execute" member identifies the command to be executed by the Server 71- The "arguments" member is used to pass any arguments required for the 72 execution of the command, it is optional when no arguments are required 73- The "id" member is a transaction identification associated with the 74 command execution, it is optional and will be part of the response if 75 provided 76 772.4 Commands Responses 78---------------------- 79 80There are two possible responses which the Server will issue as the result 81of a command execution: success or error. 82 832.4.1 success 84------------- 85 86The success response is issued when the command execution has finished 87without errors. 88 89The format is: 90 91{ "return": json-object, "id": json-value } 92 93 Where, 94 95- The "return" member contains the command returned data, which is defined 96 in a per-command basis or an empty json-object if the command does not 97 return data 98- The "id" member contains the transaction identification associated 99 with the command execution (if issued by the Client) 100 1012.4.2 error 102----------- 103 104The error response is issued when the command execution could not be 105completed because of an error condition. 106 107The format is: 108 109{ "error": { "class": json-string, "data": json-object, "desc": json-string }, 110 "id": json-value } 111 112 Where, 113 114- The "class" member contains the error class name (eg. "ServiceUnavailable") 115- The "data" member contains specific error data and is defined in a 116 per-command basis, it will be an empty json-object if the error has no data 117- The "desc" member is a human-readable error message. Clients should 118 not attempt to parse this message. 119- The "id" member contains the transaction identification associated with 120 the command execution (if issued by the Client) 121 122NOTE: Some errors can occur before the Server is able to read the "id" member, 123in these cases the "id" member will not be part of the error response, even 124if provided by the client. 125 1262.5 Asynchronous events 127----------------------- 128 129As a result of state changes, the Server may send messages unilaterally 130to the Client at any time. They are called 'asynchronous events'. 131 132The format is: 133 134{ "event": json-string, "data": json-object, 135 "timestamp": { "seconds": json-number, "microseconds": json-number } } 136 137 Where, 138 139- The "event" member contains the event's name 140- The "data" member contains event specific data, which is defined in a 141 per-event basis, it is optional 142- The "timestamp" member contains the exact time of when the event occurred 143 in the Server. It is a fixed json-object with time in seconds and 144 microseconds 145 146For a listing of supported asynchronous events, please, refer to the 147qmp-events.txt file. 148 1493. QMP Examples 150=============== 151 152This section provides some examples of real QMP usage, in all of them 153'C' stands for 'Client' and 'S' stands for 'Server'. 154 1553.1 Server greeting 156------------------- 157 158S: {"QMP": {"version": {"qemu": "0.12.50", "package": ""}, "capabilities": []}} 159 1603.2 Simple 'stop' execution 161--------------------------- 162 163C: { "execute": "stop" } 164S: {"return": {}} 165 1663.3 KVM information 167------------------- 168 169C: { "execute": "query-kvm", "id": "example" } 170S: {"return": {"enabled": true, "present": true}, "id": "example"} 171 1723.4 Parsing error 173------------------ 174 175C: { "execute": } 176S: {"error": {"class": "JSONParsing", "desc": "Invalid JSON syntax", "data": 177{}}} 178 1793.5 Powerdown event 180------------------- 181 182S: {"timestamp": {"seconds": 1258551470, "microseconds": 802384}, "event": 183"POWERDOWN"} 184 1854. Capabilities Negotiation 186---------------------------- 187 188When a Client successfully establishes a connection, the Server is in 189Capabilities Negotiation mode. 190 191In this mode only the 'qmp_capabilities' command is allowed to run, all 192other commands will return the CommandNotFound error. Asynchronous messages 193are not delivered either. 194 195Clients should use the 'qmp_capabilities' command to enable capabilities 196advertised in the Server's greeting (section '2.2 Server Greeting') they 197support. 198 199When the 'qmp_capabilities' command is issued, and if it does not return an 200error, the Server enters in Command mode where capabilities changes take 201effect, all commands (except 'qmp_capabilities') are allowed and asynchronous 202messages are delivered. 203 2045 Compatibility Considerations 205------------------------------ 206 207All protocol changes or new features which modify the protocol format in an 208incompatible way are disabled by default and will be advertised by the 209capabilities array (section '2.2 Server Greeting'). Thus, Clients can check 210that array and enable the capabilities they support. 211 212Additionally, Clients must not assume any particular: 213 214- Size of json-objects or length of json-arrays 215- Order of json-object members or json-array elements 216- Amount of errors generated by a command, that is, new errors can be added 217 to any existing command in newer versions of the Server 218 2196. Downstream extension of QMP 220------------------------------ 221 222We recommend that downstream consumers of QEMU do *not* modify QMP. 223Management tools should be able to support both upstream and downstream 224versions of QMP without special logic, and downstream extensions are 225inherently at odds with that. 226 227However, we recognize that it is sometimes impossible for downstreams to 228avoid modifying QMP. Both upstream and downstream need to take care to 229preserve long-term compatibility and interoperability. 230 231To help with that, QMP reserves JSON object member names beginning with 232'__' (double underscore) for downstream use ("downstream names"). This 233means upstream will never use any downstream names for its commands, 234arguments, errors, asynchronous events, and so forth. 235 236Any new names downstream wishes to add must begin with '__'. To 237ensure compatibility with other downstreams, it is strongly 238recommended that you prefix your downstram names with '__RFQDN_' where 239RFQDN is a valid, reverse fully qualified domain name which you 240control. For example, a qemu-kvm specific monitor command would be: 241 242 (qemu) __org.linux-kvm_enable_irqchip 243 244Downstream must not change the server greeting (section 2.2) other than 245to offer additional capabilities. But see below for why even that is 246discouraged. 247 248Section '5 Compatibility Considerations' applies to downstream as well 249as to upstream, obviously. It follows that downstream must behave 250exactly like upstream for any input not containing members with 251downstream names ("downstream members"), except it may add members 252with downstream names to its output. 253 254Thus, a client should not be able to distinguish downstream from 255upstream as long as it doesn't send input with downstream members, and 256properly ignores any downstream members in the output it receives. 257 258Advice on downstream modifications: 259 2601. Introducing new commands is okay. If you want to extend an existing 261 command, consider introducing a new one with the new behaviour 262 instead. 263 2642. Introducing new asynchronous messages is okay. If you want to extend 265 an existing message, consider adding a new one instead. 266 2673. Introducing new errors for use in new commands is okay. Adding new 268 errors to existing commands counts as extension, so 1. applies. 269 2704. New capabilities are strongly discouraged. Capabilities are for 271 evolving the basic protocol, and multiple diverging basic protocol 272 dialects are most undesirable. 273