aboutsummaryrefslogtreecommitdiffstats
path: root/QMP/qmp-spec.txt
blob: f3c03277034879e16b6c1d0bdebc231389050ecd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
           QEMU Monitor Protocol 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-object members and json-array elements mentioned in
this document will be in a certain order. However, in real protocol usage
they 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
ready for capabilities negotiation (for more information refer to section
'4. Capabilities Negotiation').

The format is:

{ "QMP": { "version": json-object, "capabilities": json-array } }

 Where,

- The "version" member contains the Server's version information (the format
  is the same of the 'query-version' command)
- 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-object, "id": json-value }

 Where,

- The "return" member contains the command returned data, which is defined
  in a per-command basis or an empty json-object 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-object, "desc": json-string },
  "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 "desc" member is a human-readable error message. Clients should
  not attempt to parse this message.
- 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-object,
  "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 occurred
  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": {"version": {"qemu": "0.12.50", "package": ""}, "capabilities": []}}

3.2 Simple 'stop' execution
---------------------------

C: { "execute": "stop" }
S: {"return": {}}

3.3 KVM information
-------------------

C: { "execute": "query-kvm", "id": "example" }
S: {"return": {"enabled": true, "present": true}, "id": "example"}

3.4 Parsing error
------------------

C: { "execute": }
S: {"error": {"class": "JSONParsing", "desc": "Invalid JSON syntax", "data":
{}}}

3.5 Powerdown event
-------------------

S: {"timestamp": {"seconds": 1258551470, "microseconds": 802384}, "event":
"POWERDOWN"}

4. Capabilities Negotiation
----------------------------

When a Client successfully establishes a connection, the Server is in
Capabilities Negotiation mode.

In this mode only the 'qmp_capabilities' command is allowed to run, all
other commands will return the CommandNotFound error. Asynchronous messages
are not delivered either.

Clients should use the 'qmp_capabilities' command to enable capabilities
advertised in the Server's greeting (section '2.2 Server Greeting') they
support.

When the 'qmp_capabilities' command is issued, and if it does not return an
error, the Server enters in Command mode where capabilities changes take
effect, all commands (except 'qmp_capabilities') are allowed and asynchronous
messages are delivered.

5 Compatibility Considerations
------------------------------

All protocol changes or new features which modify the protocol format in an
incompatible way are disabled by default and will be advertised by the
capabilities array (section '2.2 Server Greeting'). Thus, Clients can check
that array and enable the capabilities they support.

Additionally, Clients must not assume any particular:

- Size of json-objects or length of json-arrays
- Order of json-object members or json-array elements
- Amount of errors generated by a command, that is, new errors can be added
  to any existing command in newer versions of the Server