If you're planning to adopt QMP, please observe the following:
- 1. The deprecation policy will take efect and be documented soon, please
+ 1. The deprecation policy will take effect and be documented soon, please
check the documentation of each used command as soon as a new release of
QEMU is available
{
.name = "quit",
.args_type = "",
- .params = "",
- .help = "quit the emulator",
- .user_print = monitor_user_noop,
- .mhandler.cmd_new = do_quit,
+ .mhandler.cmd_new = qmp_marshal_input_quit,
},
SQMP
{
.name = "stop",
.args_type = "",
- .params = "",
- .help = "stop emulation",
- .user_print = monitor_user_noop,
- .mhandler.cmd_new = do_stop,
+ .mhandler.cmd_new = qmp_marshal_input_stop,
},
SQMP
{
.name = "system_reset",
.args_type = "",
- .params = "",
- .help = "reset the system",
- .user_print = monitor_user_noop,
- .mhandler.cmd_new = do_system_reset,
+ .mhandler.cmd_new = qmp_marshal_input_system_reset,
},
SQMP
Example:
--> { "execute": "blockdev-snapshot", "arguments": { "device": "ide-hd0",
- "snapshot-file":
- "/some/place/my-image",
- "format": "qcow2" } }
+-> { "execute": "blockdev-snapshot-sync", "arguments": { "device": "ide-hd0",
+ "snapshot-file":
+ "/some/place/my-image",
+ "format": "qcow2" } }
<- { "return": {} }
EQMP
EQMP
+ {
+ .name = "add_client",
+ .args_type = "protocol:s,fdname:s,skipauth:b?",
+ .params = "protocol fdname skipauth",
+ .help = "add a graphics client",
+ .user_print = monitor_user_noop,
+ .mhandler.cmd_new = add_graphics_client,
+ },
+
+SQMP
+add_client
+----------
+
+Add a graphics client
+
+Arguments:
+
+- "protocol": protocol name (json-string)
+- "fdname": file descriptor name (json-string)
+
+Example:
+
+-> { "execute": "add_client", "arguments": { "protocol": "vnc",
+ "fdname": "myclient" } }
+<- { "return": {} }
+
+EQMP
{
.name = "qmp_capabilities",
.args_type = "",
EQMP
+ {
+ .name = "query-version",
+ .args_type = "",
+ .mhandler.cmd_new = qmp_marshal_input_query_version,
+ },
+
SQMP
query-commands
--------------
EQMP
+ {
+ .name = "query-commands",
+ .args_type = "",
+ .mhandler.cmd_new = qmp_marshal_input_query_commands,
+ },
+
SQMP
query-chardev
-------------
EQMP
+ {
+ .name = "query-chardev",
+ .args_type = "",
+ .mhandler.cmd_new = qmp_marshal_input_query_chardev,
+ },
+
SQMP
query-block
-----------
- Possible values: "unknown"
- "removable": true if the device is removable, false otherwise (json-bool)
- "locked": true if the device is locked, false otherwise (json-bool)
+- "tray-open": only present if removable, true if the device has a tray,
+ and it is open (json-bool)
- "inserted": only present if the device is inserted, it is a json-object
containing the following:
- "file": device file name (json-string)
"tftp", "vdi", "vmdk", "vpc", "vvfat"
- "backing_file": backing file name (json-string, optional)
- "encrypted": true if encrypted, false otherwise (json-bool)
+- "io-status": I/O operation status, only present if the device supports it
+ and the VM is configured to stop on errors. It's always reset
+ to "ok" when the "cont" command is issued (json_string, optional)
+ - Possible values: "ok", "failed", "nospace"
Example:
<- {
"return":[
{
+ "io-status": "ok",
"device":"ide0-hd0",
"locked":false,
"removable":false,
"type":"unknown"
},
{
+ "io-status": "ok",
"device":"ide1-cd0",
"locked":false,
"removable":true,
- "wr_bytes": bytes written (json-int)
- "rd_operations": read operations (json-int)
- "wr_operations": write operations (json-int)
+ - "flush_operations": cache flush operations (json-int)
+ - "wr_total_time_ns": total time spend on writes in nano-seconds (json-int)
+ - "rd_total_time_ns": total time spend on reads in nano-seconds (json-int)
+ - "flush_total_time_ns": total time spend on cache flushes in nano-seconds (json-int)
- "wr_highest_offset": Highest offset of a sector written since the
BlockDriverState has been opened (json-int)
- "parent": Contains recursively the statistics of the underlying
"wr_operations":751,
"rd_bytes":122567168,
"rd_operations":36772
+ "wr_total_times_ns":313253456
+ "rd_total_times_ns":3465673657
+ "flush_total_times_ns":49653
+ "flush_operations":61,
}
},
"stats":{
"wr_operations":692,
"rd_bytes":122739200,
"rd_operations":36604
+ "flush_operations":51,
+ "wr_total_times_ns":313253456
+ "rd_total_times_ns":3465673657
+ "flush_total_times_ns":49653
}
},
{
"wr_operations":0,
"rd_bytes":0,
"rd_operations":0
+ "flush_operations":0,
+ "wr_total_times_ns":0
+ "rd_total_times_ns":0
+ "flush_total_times_ns":0
}
},
{
"wr_operations":0,
"rd_bytes":0,
"rd_operations":0
+ "flush_operations":0,
+ "wr_total_times_ns":0
+ "rd_total_times_ns":0
+ "flush_total_times_ns":0
}
},
{
"wr_operations":0,
"rd_bytes":0,
"rd_operations":0
+ "flush_operations":0,
+ "wr_total_times_ns":0
+ "rd_total_times_ns":0
+ "flush_total_times_ns":0
}
}
]
EQMP
+ {
+ .name = "query-kvm",
+ .args_type = "",
+ .mhandler.cmd_new = qmp_marshal_input_query_kvm,
+ },
+
SQMP
query-status
------------
- "running": true if the VM is running, or false if it is paused (json-bool)
- "singlestep": true if the VM is in single step mode,
false otherwise (json-bool)
+- "status": one of the following values (json-string)
+ "debug" - QEMU is running on a debugger
+ "inmigrate" - guest is paused waiting for an incoming migration
+ "internal-error" - An internal error that prevents further guest
+ execution has occurred
+ "io-error" - the last IOP has failed and the device is configured
+ to pause on I/O errors
+ "paused" - guest has been paused via the 'stop' command
+ "postmigrate" - guest is paused following a successful 'migrate'
+ "prelaunch" - QEMU was started with -S and guest has not started
+ "finish-migrate" - guest is paused to finish the migration process
+ "restore-vm" - guest is paused to restore VM state
+ "running" - guest is actively running
+ "save-vm" - guest is paused to save the VM state
+ "shutdown" - guest is shut down (and -no-shutdown is in use)
+ "watchdog" - the watchdog action is configured to pause and
+ has been triggered
Example:
-> { "execute": "query-status" }
-<- { "return": { "running": true, "singlestep": false } }
+<- { "return": { "running": true, "singlestep": false, "status": "running" } }
EQMP
+
+ {
+ .name = "query-status",
+ .args_type = "",
+ .mhandler.cmd_new = qmp_marshal_input_query_status,
+ },
SQMP
query-mice
EQMP
+ {
+ .name = "query-name",
+ .args_type = "",
+ .mhandler.cmd_new = qmp_marshal_input_query_name,
+ },
+
SQMP
query-uuid
----------
EQMP
+ {
+ .name = "query-uuid",
+ .args_type = "",
+ .mhandler.cmd_new = qmp_marshal_input_query_uuid,
+ },
+
SQMP
query-migrate
-------------