|
|
1.1 ! root 1: QEMU Monitor Protocol Specification - Version 0.1 ! 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: ! 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. ! 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: ! 88: { "return": json-object, "id": json-value } ! 89: ! 90: Where, ! 91: ! 92: - The "return" member contains the command returned data, which is defined ! 93: in a per-command basis or an empty json-object if the command does not ! 94: return data ! 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: ! 106: { "error": { "class": json-string, "data": json-object, "desc": json-string }, ! 107: "id": json-value } ! 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 ! 114: - The "desc" member is a human-readable error message. Clients should ! 115: not attempt to parse this message. ! 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: ! 131: { "event": json-string, "data": json-object, ! 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 ! 139: - The "timestamp" member contains the exact time of when the event occurred ! 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" } ! 161: S: {"return": {}} ! 162: ! 163: 3.3 KVM information ! 164: ------------------- ! 165: ! 166: C: { "execute": "query-kvm", "id": "example" } ! 167: S: {"return": {"enabled": true, "present": true}, "id": "example"} ! 168: ! 169: 3.4 Parsing error ! 170: ------------------ ! 171: ! 172: C: { "execute": } ! 173: S: {"error": {"class": "JSONParsing", "desc": "Invalid JSON syntax", "data": ! 174: {}}} ! 175: ! 176: 3.5 Powerdown event ! 177: ------------------- ! 178: ! 179: S: {"timestamp": {"seconds": 1258551470, "microseconds": 802384}, "event": ! 180: "POWERDOWN"} ! 181: ! 182: 4. Compatibility Considerations ! 183: -------------------------------- ! 184: ! 185: In order to achieve maximum compatibility between versions, Clients must not ! 186: assume any particular: ! 187: ! 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 ! 192: ! 193: Additionally, Clients should always: ! 194: ! 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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.