]>
Commit | Line | Data |
---|---|---|
94048982 | 1 | QEMU Monitor Protocol Specification - Version 0.1 |
f544d174 LC |
2 | |
3 | 1. Introduction | |
4 | =============== | |
5 | ||
6 | This document specifies the QEMU Monitor Protocol (QMP), a JSON-based protocol | |
7 | which is available for applications to control QEMU at the machine-level. | |
8 | ||
9 | To enable QMP support, QEMU has to be run in "control mode". This is done by | |
10 | starting QEMU with the appropriate command-line options. Please, refer to the | |
11 | QEMU manual page for more information. | |
12 | ||
13 | 2. Protocol Specification | |
14 | ========================= | |
15 | ||
16 | This section details the protocol format. For the purpose of this document | |
17 | "Client" is any application which is communicating with QEMU in control mode, | |
18 | and "Server" is QEMU itself. | |
19 | ||
20 | JSON data structures, when mentioned in this document, are always in the | |
21 | following format: | |
22 | ||
23 | json-DATA-STRUCTURE-NAME | |
24 | ||
25 | Where DATA-STRUCTURE-NAME is any valid JSON data structure, as defined by | |
26 | the JSON standard: | |
27 | ||
28 | http://www.ietf.org/rfc/rfc4627.txt | |
29 | ||
94048982 LC |
30 | For convenience, json-object members and json-array elements mentioned in |
31 | this document will be in a certain order. However, in real protocol usage | |
32 | they can be in ANY order, thus no particular order should be assumed. | |
f544d174 LC |
33 | |
34 | 2.1 General Definitions | |
35 | ----------------------- | |
36 | ||
37 | 2.1.1 All interactions transmitted by the Server are json-objects, always | |
38 | terminating with CRLF | |
39 | ||
40 | 2.1.2 All json-objects members are mandatory when not specified otherwise | |
41 | ||
42 | 2.2 Server Greeting | |
43 | ------------------- | |
44 | ||
45 | Right when connected the Server will issue a greeting message, which signals | |
46 | that the connection has been successfully established and that the Server is | |
47 | waiting for commands. | |
48 | ||
49 | The format is: | |
50 | ||
51 | { "QMP": { "capabilities": json-array } } | |
52 | ||
53 | Where, | |
54 | ||
55 | - The "capabilities" member specify the availability of features beyond the | |
56 | baseline specification | |
57 | ||
58 | 2.3 Issuing Commands | |
59 | -------------------- | |
60 | ||
61 | The format for command execution is: | |
62 | ||
63 | { "execute": json-string, "arguments": json-object, "id": json-value } | |
64 | ||
65 | Where, | |
66 | ||
67 | - The "execute" member identifies the command to be executed by the Server | |
68 | - The "arguments" member is used to pass any arguments required for the | |
69 | execution of the command, it is optional when no arguments are required | |
70 | - The "id" member is a transaction identification associated with the | |
71 | command execution, it is optional and will be part of the response if | |
72 | provided | |
73 | ||
74 | 2.4 Commands Responses | |
75 | ---------------------- | |
76 | ||
77 | There are two possible responses which the Server will issue as the result | |
78 | of a command execution: success or error. | |
79 | ||
80 | 2.4.1 success | |
81 | ------------- | |
82 | ||
83 | The success response is issued when the command execution has finished | |
84 | without errors. | |
85 | ||
86 | The format is: | |
87 | ||
94048982 | 88 | { "return": json-object, "id": json-value } |
f544d174 LC |
89 | |
90 | Where, | |
91 | ||
92 | - The "return" member contains the command returned data, which is defined | |
94048982 LC |
93 | in a per-command basis or an empty json-object if the command does not |
94 | return data | |
f544d174 LC |
95 | - The "id" member contains the transaction identification associated |
96 | with the command execution (if issued by the Client) | |
97 | ||
98 | 2.4.2 error | |
99 | ----------- | |
100 | ||
101 | The error response is issued when the command execution could not be | |
102 | completed because of an error condition. | |
103 | ||
104 | The format is: | |
105 | ||
94048982 | 106 | { "error": { "class": json-string, "data": json-object, "desc": json-string }, |
77e595e7 | 107 | "id": json-value } |
f544d174 LC |
108 | |
109 | Where, | |
110 | ||
111 | - The "class" member contains the error class name (eg. "ServiceUnavailable") | |
112 | - The "data" member contains specific error data and is defined in a | |
113 | per-command basis, it will be an empty json-object if the error has no data | |
94048982 | 114 | - The "desc" member is a human-readable error message. Clients should |
77e595e7 | 115 | not attempt to parse this message. |
f544d174 LC |
116 | - The "id" member contains the transaction identification associated with |
117 | the command execution (if issued by the Client) | |
118 | ||
119 | NOTE: Some errors can occur before the Server is able to read the "id" member, | |
120 | in these cases the "id" member will not be part of the error response, even | |
121 | if provided by the client. | |
122 | ||
123 | 2.5 Asynchronous events | |
124 | ----------------------- | |
125 | ||
126 | As a result of state changes, the Server may send messages unilaterally | |
127 | to the Client at any time. They are called 'asynchronous events'. | |
128 | ||
129 | The format is: | |
130 | ||
94048982 | 131 | { "event": json-string, "data": json-object, |
f544d174 LC |
132 | "timestamp": { "seconds": json-number, "microseconds": json-number } } |
133 | ||
134 | Where, | |
135 | ||
136 | - The "event" member contains the event's name | |
137 | - The "data" member contains event specific data, which is defined in a | |
138 | per-event basis, it is optional | |
94048982 | 139 | - The "timestamp" member contains the exact time of when the event occurred |
f544d174 LC |
140 | in the Server. It is a fixed json-object with time in seconds and |
141 | microseconds | |
142 | ||
143 | For a listing of supported asynchronous events, please, refer to the | |
144 | qmp-events.txt file. | |
145 | ||
146 | 3. QMP Examples | |
147 | =============== | |
148 | ||
149 | This section provides some examples of real QMP usage, in all of them | |
150 | 'C' stands for 'Client' and 'S' stands for 'Server'. | |
151 | ||
152 | 3.1 Server greeting | |
153 | ------------------- | |
154 | ||
155 | S: {"QMP": {"capabilities": []}} | |
156 | ||
157 | 3.2 Simple 'stop' execution | |
158 | --------------------------- | |
159 | ||
160 | C: { "execute": "stop" } | |
94048982 | 161 | S: {"return": {}} |
f544d174 LC |
162 | |
163 | 3.3 KVM information | |
164 | ------------------- | |
165 | ||
94048982 LC |
166 | C: { "execute": "query-kvm", "id": "example" } |
167 | S: {"return": {"enabled": true, "present": true}, "id": "example"} | |
f544d174 LC |
168 | |
169 | 3.4 Parsing error | |
170 | ------------------ | |
171 | ||
172 | C: { "execute": } | |
94048982 LC |
173 | S: {"error": {"class": "JSONParsing", "desc": "Invalid JSON syntax", "data": |
174 | {}}} | |
f544d174 LC |
175 | |
176 | 3.5 Powerdown event | |
177 | ------------------- | |
178 | ||
179 | S: {"timestamp": {"seconds": 1258551470, "microseconds": 802384}, "event": | |
180 | "POWERDOWN"} | |
181 | ||
94048982 LC |
182 | 4. Compatibility Considerations |
183 | -------------------------------- | |
f544d174 | 184 | |
94048982 LC |
185 | In order to achieve maximum compatibility between versions, Clients must not |
186 | assume any particular: | |
f544d174 | 187 | |
94048982 LC |
188 | - Size of json-objects or length of json-arrays |
189 | - Order of json-object members or json-array elements | |
190 | - Amount of errors generated by a command, that is, new errors can be added | |
191 | to any existing command in newer versions of the Server | |
f544d174 | 192 | |
94048982 | 193 | Additionally, Clients should always: |
f544d174 | 194 | |
94048982 LC |
195 | - Check the capabilities json-array at connection time |
196 | - Check the availability of commands with 'query-commands' before issuing them | |
197 | ||
198 | 5. Recommendations to Client implementors | |
199 | ----------------------------------------- | |
200 | ||
201 | 5.1 The Server should be always started in pause mode, thus the Client is | |
202 | able to perform any setup procedure without the risk of race conditions | |
203 | and related problems |