QMP: Update qmp-spec.txt

Simplify the text, fix some of the examples.

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
Luiz Capitulino 2013-09-11 13:52:51 -04:00
parent 52bbff77c4
commit 715c18600c

View file

@ -1,21 +1,17 @@
QEMU Monitor Protocol Specification - Version 0.1 QEMU Machine Protocol Specification
1. Introduction 1. Introduction
=============== ===============
This document specifies the QEMU Monitor Protocol (QMP), a JSON-based protocol This document specifies the QEMU Machine Protocol (QMP), a JSON-based protocol
which is available for applications to control QEMU at the machine-level. which is available for applications to operate 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 2. Protocol Specification
========================= =========================
This section details the protocol format. For the purpose of this document This section details the protocol format. For the purpose of this document
"Client" is any application which is communicating with QEMU in control mode, "Client" is any application which is using QMP to communicate with QEMU and
and "Server" is QEMU itself. "Server" is QEMU itself.
JSON data structures, when mentioned in this document, are always in the JSON data structures, when mentioned in this document, are always in the
following format: following format:
@ -47,14 +43,14 @@ that the connection has been successfully established and that the Server is
ready for capabilities negotiation (for more information refer to section ready for capabilities negotiation (for more information refer to section
'4. Capabilities Negotiation'). '4. Capabilities Negotiation').
The format is: The greeting message format is:
{ "QMP": { "version": json-object, "capabilities": json-array } } { "QMP": { "version": json-object, "capabilities": json-array } }
Where, Where,
- The "version" member contains the Server's version information (the format - The "version" member contains the Server's version information (the format
is the same of the 'query-version' command) is the same of the query-version command)
- The "capabilities" member specify the availability of features beyond the - The "capabilities" member specify the availability of features beyond the
baseline specification baseline specification
@ -83,10 +79,7 @@ of a command execution: success or error.
2.4.1 success 2.4.1 success
------------- -------------
The success response is issued when the command execution has finished The format of a success response is:
without errors.
The format is:
{ "return": json-object, "id": json-value } { "return": json-object, "id": json-value }
@ -96,15 +89,12 @@ The format is:
in a per-command basis or an empty json-object if the command does not in a per-command basis or an empty json-object if the command does not
return data return data
- The "id" member contains the transaction identification associated - The "id" member contains the transaction identification associated
with the command execution (if issued by the Client) with the command execution if issued by the Client
2.4.2 error 2.4.2 error
----------- -----------
The error response is issued when the command execution could not be The format of an error response is:
completed because of an error condition.
The format is:
{ "error": { "class": json-string, "desc": json-string }, "id": json-value } { "error": { "class": json-string, "desc": json-string }, "id": json-value }
@ -114,7 +104,7 @@ The format is:
- The "desc" member is a human-readable error message. Clients should - The "desc" member is a human-readable error message. Clients should
not attempt to parse this message. not attempt to parse this message.
- The "id" member contains the transaction identification associated with - The "id" member contains the transaction identification associated with
the command execution (if issued by the Client) the command execution if issued by the Client
NOTE: Some errors can occur before the Server is able to read the "id" member, 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 in these cases the "id" member will not be part of the error response, even
@ -124,9 +114,9 @@ if provided by the client.
----------------------- -----------------------
As a result of state changes, the Server may send messages unilaterally As a result of state changes, the Server may send messages unilaterally
to the Client at any time. They are called 'asynchronous events'. to the Client at any time. They are called "asynchronous events".
The format is: The format of asynchronous events is:
{ "event": json-string, "data": json-object, { "event": json-string, "data": json-object,
"timestamp": { "seconds": json-number, "microseconds": json-number } } "timestamp": { "seconds": json-number, "microseconds": json-number } }
@ -147,36 +137,37 @@ qmp-events.txt file.
=============== ===============
This section provides some examples of real QMP usage, in all of them This section provides some examples of real QMP usage, in all of them
'C' stands for 'Client' and 'S' stands for 'Server'. "C" stands for "Client" and "S" stands for "Server".
3.1 Server greeting 3.1 Server greeting
------------------- -------------------
S: {"QMP": {"version": {"qemu": "0.12.50", "package": ""}, "capabilities": []}} S: { "QMP": { "version": { "qemu": { "micro": 50, "minor": 6, "major": 1 },
"package": ""}, "capabilities": []}}
3.2 Simple 'stop' execution 3.2 Simple 'stop' execution
--------------------------- ---------------------------
C: { "execute": "stop" } C: { "execute": "stop" }
S: {"return": {}} S: { "return": {} }
3.3 KVM information 3.3 KVM information
------------------- -------------------
C: { "execute": "query-kvm", "id": "example" } C: { "execute": "query-kvm", "id": "example" }
S: {"return": {"enabled": true, "present": true}, "id": "example"} S: { "return": { "enabled": true, "present": true }, "id": "example"}
3.4 Parsing error 3.4 Parsing error
------------------ ------------------
C: { "execute": } C: { "execute": }
S: {"error": {"class": "GenericError", "desc": "Invalid JSON syntax" } } S: { "error": { "class": "GenericError", "desc": "Invalid JSON syntax" } }
3.5 Powerdown event 3.5 Powerdown event
------------------- -------------------
S: {"timestamp": {"seconds": 1258551470, "microseconds": 802384}, "event": S: { "timestamp": { "seconds": 1258551470, "microseconds": 802384 },
"POWERDOWN"} "event": "POWERDOWN" }
4. Capabilities Negotiation 4. Capabilities Negotiation
---------------------------- ----------------------------
@ -184,17 +175,17 @@ S: {"timestamp": {"seconds": 1258551470, "microseconds": 802384}, "event":
When a Client successfully establishes a connection, the Server is in When a Client successfully establishes a connection, the Server is in
Capabilities Negotiation mode. Capabilities Negotiation mode.
In this mode only the 'qmp_capabilities' command is allowed to run, all In this mode only the qmp_capabilities command is allowed to run, all
other commands will return the CommandNotFound error. Asynchronous messages other commands will return the CommandNotFound error. Asynchronous
are not delivered either. messages are not delivered either.
Clients should use the 'qmp_capabilities' command to enable capabilities Clients should use the qmp_capabilities command to enable capabilities
advertised in the Server's greeting (section '2.2 Server Greeting') they advertised in the Server's greeting (section '2.2 Server Greeting') they
support. support.
When the 'qmp_capabilities' command is issued, and if it does not return an 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 error, the Server enters in Command mode where capabilities changes take
effect, all commands (except 'qmp_capabilities') are allowed and asynchronous effect, all commands (except qmp_capabilities) are allowed and asynchronous
messages are delivered. messages are delivered.
5 Compatibility Considerations 5 Compatibility Considerations
@ -245,7 +236,7 @@ arguments, errors, asynchronous events, and so forth.
Any new names downstream wishes to add must begin with '__'. To Any new names downstream wishes to add must begin with '__'. To
ensure compatibility with other downstreams, it is strongly ensure compatibility with other downstreams, it is strongly
recommended that you prefix your downstram names with '__RFQDN_' where recommended that you prefix your downstream names with '__RFQDN_' where
RFQDN is a valid, reverse fully qualified domain name which you RFQDN is a valid, reverse fully qualified domain name which you
control. For example, a qemu-kvm specific monitor command would be: control. For example, a qemu-kvm specific monitor command would be: