1# -*- Mode: Python -*- 2# vim: filetype=python 3# 4 5## 6# = Miscellanea 7## 8 9{ 'include': 'common.json' } 10 11## 12# @add_client: 13# 14# Allow client connections for VNC, Spice and socket based 15# character devices to be passed in to QEMU via SCM_RIGHTS. 16# 17# @protocol: protocol name. Valid names are "vnc", "spice", "@dbus-display" or 18# the name of a character device (eg. from -chardev id=XXXX) 19# 20# @fdname: file descriptor name previously passed via 'getfd' command 21# 22# @skipauth: whether to skip authentication. Only applies 23# to "vnc" and "spice" protocols 24# 25# @tls: whether to perform TLS. Only applies to the "spice" 26# protocol 27# 28# Returns: nothing on success. 29# 30# Since: 0.14 31# 32# Example: 33# 34# -> { "execute": "add_client", "arguments": { "protocol": "vnc", 35# "fdname": "myclient" } } 36# <- { "return": {} } 37# 38## 39{ 'command': 'add_client', 40 'data': { 'protocol': 'str', 'fdname': 'str', '*skipauth': 'bool', 41 '*tls': 'bool' } } 42 43## 44# @NameInfo: 45# 46# Guest name information. 47# 48# @name: The name of the guest 49# 50# Since: 0.14 51## 52{ 'struct': 'NameInfo', 'data': {'*name': 'str'} } 53 54## 55# @query-name: 56# 57# Return the name information of a guest. 58# 59# Returns: @NameInfo of the guest 60# 61# Since: 0.14 62# 63# Example: 64# 65# -> { "execute": "query-name" } 66# <- { "return": { "name": "qemu-name" } } 67# 68## 69{ 'command': 'query-name', 'returns': 'NameInfo', 'allow-preconfig': true } 70 71## 72# @IOThreadInfo: 73# 74# Information about an iothread 75# 76# @id: the identifier of the iothread 77# 78# @thread-id: ID of the underlying host thread 79# 80# @poll-max-ns: maximum polling time in ns, 0 means polling is disabled 81# (since 2.9) 82# 83# @poll-grow: how many ns will be added to polling time, 0 means that it's not 84# configured (since 2.9) 85# 86# @poll-shrink: how many ns will be removed from polling time, 0 means that 87# it's not configured (since 2.9) 88# 89# @aio-max-batch: maximum number of requests in a batch for the AIO engine, 90# 0 means that the engine will use its default (since 6.1) 91# 92# Since: 2.0 93## 94{ 'struct': 'IOThreadInfo', 95 'data': {'id': 'str', 96 'thread-id': 'int', 97 'poll-max-ns': 'int', 98 'poll-grow': 'int', 99 'poll-shrink': 'int', 100 'aio-max-batch': 'int' } } 101 102## 103# @query-iothreads: 104# 105# Returns a list of information about each iothread. 106# 107# Note: this list excludes the QEMU main loop thread, which is not declared 108# using the -object iothread command-line option. It is always the main thread 109# of the process. 110# 111# Returns: a list of @IOThreadInfo for each iothread 112# 113# Since: 2.0 114# 115# Example: 116# 117# -> { "execute": "query-iothreads" } 118# <- { "return": [ 119# { 120# "id":"iothread0", 121# "thread-id":3134 122# }, 123# { 124# "id":"iothread1", 125# "thread-id":3135 126# } 127# ] 128# } 129# 130## 131{ 'command': 'query-iothreads', 'returns': ['IOThreadInfo'], 132 'allow-preconfig': true } 133 134## 135# @stop: 136# 137# Stop all guest VCPU execution. 138# 139# Since: 0.14 140# 141# Notes: This function will succeed even if the guest is already in the stopped 142# state. In "inmigrate" state, it will ensure that the guest 143# remains paused once migration finishes, as if the -S option was 144# passed on the command line. 145# 146# Example: 147# 148# -> { "execute": "stop" } 149# <- { "return": {} } 150# 151## 152{ 'command': 'stop' } 153 154## 155# @cont: 156# 157# Resume guest VCPU execution. 158# 159# Since: 0.14 160# 161# Returns: If successful, nothing 162# 163# Notes: This command will succeed if the guest is currently running. It 164# will also succeed if the guest is in the "inmigrate" state; in 165# this case, the effect of the command is to make sure the guest 166# starts once migration finishes, removing the effect of the -S 167# command line option if it was passed. 168# 169# Example: 170# 171# -> { "execute": "cont" } 172# <- { "return": {} } 173# 174## 175{ 'command': 'cont' } 176 177## 178# @x-exit-preconfig: 179# 180# Exit from "preconfig" state 181# 182# This command makes QEMU exit the preconfig state and proceed with 183# VM initialization using configuration data provided on the command line 184# and via the QMP monitor during the preconfig state. The command is only 185# available during the preconfig state (i.e. when the --preconfig command 186# line option was in use). 187# 188# Features: 189# @unstable: This command is experimental. 190# 191# Since: 3.0 192# 193# Returns: nothing 194# 195# Example: 196# 197# -> { "execute": "x-exit-preconfig" } 198# <- { "return": {} } 199# 200## 201{ 'command': 'x-exit-preconfig', 'allow-preconfig': true, 202 'features': [ 'unstable' ] } 203 204## 205# @human-monitor-command: 206# 207# Execute a command on the human monitor and return the output. 208# 209# @command-line: the command to execute in the human monitor 210# 211# @cpu-index: The CPU to use for commands that require an implicit CPU 212# 213# Features: 214# @savevm-monitor-nodes: If present, HMP command savevm only snapshots 215# monitor-owned nodes if they have no parents. 216# This allows the use of 'savevm' with 217# -blockdev. (since 4.2) 218# 219# Returns: the output of the command as a string 220# 221# Since: 0.14 222# 223# Notes: This command only exists as a stop-gap. Its use is highly 224# discouraged. The semantics of this command are not 225# guaranteed: this means that command names, arguments and 226# responses can change or be removed at ANY time. Applications 227# that rely on long term stability guarantees should NOT 228# use this command. 229# 230# Known limitations: 231# 232# * This command is stateless, this means that commands that depend 233# on state information (such as getfd) might not work 234# 235# * Commands that prompt the user for data don't currently work 236# 237# Example: 238# 239# -> { "execute": "human-monitor-command", 240# "arguments": { "command-line": "info kvm" } } 241# <- { "return": "kvm support: enabled\r\n" } 242# 243## 244{ 'command': 'human-monitor-command', 245 'data': {'command-line': 'str', '*cpu-index': 'int'}, 246 'returns': 'str', 247 'features': [ 'savevm-monitor-nodes' ] } 248 249## 250# @getfd: 251# 252# Receive a file descriptor via SCM rights and assign it a name 253# 254# @fdname: file descriptor name 255# 256# Returns: Nothing on success 257# 258# Since: 0.14 259# 260# Notes: If @fdname already exists, the file descriptor assigned to 261# it will be closed and replaced by the received file 262# descriptor. 263# 264# The 'closefd' command can be used to explicitly close the 265# file descriptor when it is no longer needed. 266# 267# Example: 268# 269# -> { "execute": "getfd", "arguments": { "fdname": "fd1" } } 270# <- { "return": {} } 271# 272## 273{ 'command': 'getfd', 'data': {'fdname': 'str'} } 274 275## 276# @closefd: 277# 278# Close a file descriptor previously passed via SCM rights 279# 280# @fdname: file descriptor name 281# 282# Returns: Nothing on success 283# 284# Since: 0.14 285# 286# Example: 287# 288# -> { "execute": "closefd", "arguments": { "fdname": "fd1" } } 289# <- { "return": {} } 290# 291## 292{ 'command': 'closefd', 'data': {'fdname': 'str'} } 293 294## 295# @AddfdInfo: 296# 297# Information about a file descriptor that was added to an fd set. 298# 299# @fdset-id: The ID of the fd set that @fd was added to. 300# 301# @fd: The file descriptor that was received via SCM rights and 302# added to the fd set. 303# 304# Since: 1.2 305## 306{ 'struct': 'AddfdInfo', 'data': {'fdset-id': 'int', 'fd': 'int'} } 307 308## 309# @add-fd: 310# 311# Add a file descriptor, that was passed via SCM rights, to an fd set. 312# 313# @fdset-id: The ID of the fd set to add the file descriptor to. 314# 315# @opaque: A free-form string that can be used to describe the fd. 316# 317# Returns: - @AddfdInfo on success 318# - If file descriptor was not received, FdNotSupplied 319# - If @fdset-id is a negative value, InvalidParameterValue 320# 321# Notes: The list of fd sets is shared by all monitor connections. 322# 323# If @fdset-id is not specified, a new fd set will be created. 324# 325# Since: 1.2 326# 327# Example: 328# 329# -> { "execute": "add-fd", "arguments": { "fdset-id": 1 } } 330# <- { "return": { "fdset-id": 1, "fd": 3 } } 331# 332## 333{ 'command': 'add-fd', 334 'data': { '*fdset-id': 'int', 335 '*opaque': 'str' }, 336 'returns': 'AddfdInfo' } 337 338## 339# @remove-fd: 340# 341# Remove a file descriptor from an fd set. 342# 343# @fdset-id: The ID of the fd set that the file descriptor belongs to. 344# 345# @fd: The file descriptor that is to be removed. 346# 347# Returns: - Nothing on success 348# - If @fdset-id or @fd is not found, FdNotFound 349# 350# Since: 1.2 351# 352# Notes: The list of fd sets is shared by all monitor connections. 353# 354# If @fd is not specified, all file descriptors in @fdset-id 355# will be removed. 356# 357# Example: 358# 359# -> { "execute": "remove-fd", "arguments": { "fdset-id": 1, "fd": 3 } } 360# <- { "return": {} } 361# 362## 363{ 'command': 'remove-fd', 'data': {'fdset-id': 'int', '*fd': 'int'} } 364 365## 366# @FdsetFdInfo: 367# 368# Information about a file descriptor that belongs to an fd set. 369# 370# @fd: The file descriptor value. 371# 372# @opaque: A free-form string that can be used to describe the fd. 373# 374# Since: 1.2 375## 376{ 'struct': 'FdsetFdInfo', 377 'data': {'fd': 'int', '*opaque': 'str'} } 378 379## 380# @FdsetInfo: 381# 382# Information about an fd set. 383# 384# @fdset-id: The ID of the fd set. 385# 386# @fds: A list of file descriptors that belong to this fd set. 387# 388# Since: 1.2 389## 390{ 'struct': 'FdsetInfo', 391 'data': {'fdset-id': 'int', 'fds': ['FdsetFdInfo']} } 392 393## 394# @query-fdsets: 395# 396# Return information describing all fd sets. 397# 398# Returns: A list of @FdsetInfo 399# 400# Since: 1.2 401# 402# Note: The list of fd sets is shared by all monitor connections. 403# 404# Example: 405# 406# -> { "execute": "query-fdsets" } 407# <- { "return": [ 408# { 409# "fds": [ 410# { 411# "fd": 30, 412# "opaque": "rdonly:/path/to/file" 413# }, 414# { 415# "fd": 24, 416# "opaque": "rdwr:/path/to/file" 417# } 418# ], 419# "fdset-id": 1 420# }, 421# { 422# "fds": [ 423# { 424# "fd": 28 425# }, 426# { 427# "fd": 29 428# } 429# ], 430# "fdset-id": 0 431# } 432# ] 433# } 434# 435## 436{ 'command': 'query-fdsets', 'returns': ['FdsetInfo'] } 437 438## 439# @CommandLineParameterType: 440# 441# Possible types for an option parameter. 442# 443# @string: accepts a character string 444# 445# @boolean: accepts "on" or "off" 446# 447# @number: accepts a number 448# 449# @size: accepts a number followed by an optional suffix (K)ilo, 450# (M)ega, (G)iga, (T)era 451# 452# Since: 1.5 453## 454{ 'enum': 'CommandLineParameterType', 455 'data': ['string', 'boolean', 'number', 'size'] } 456 457## 458# @CommandLineParameterInfo: 459# 460# Details about a single parameter of a command line option. 461# 462# @name: parameter name 463# 464# @type: parameter @CommandLineParameterType 465# 466# @help: human readable text string, not suitable for parsing. 467# 468# @default: default value string (since 2.1) 469# 470# Since: 1.5 471## 472{ 'struct': 'CommandLineParameterInfo', 473 'data': { 'name': 'str', 474 'type': 'CommandLineParameterType', 475 '*help': 'str', 476 '*default': 'str' } } 477 478## 479# @CommandLineOptionInfo: 480# 481# Details about a command line option, including its list of parameter details 482# 483# @option: option name 484# 485# @parameters: an array of @CommandLineParameterInfo 486# 487# Since: 1.5 488## 489{ 'struct': 'CommandLineOptionInfo', 490 'data': { 'option': 'str', 'parameters': ['CommandLineParameterInfo'] } } 491 492## 493# @query-command-line-options: 494# 495# Query command line option schema. 496# 497# @option: option name 498# 499# Returns: list of @CommandLineOptionInfo for all options (or for the given 500# @option). Returns an error if the given @option doesn't exist. 501# 502# Since: 1.5 503# 504# Example: 505# 506# -> { "execute": "query-command-line-options", 507# "arguments": { "option": "option-rom" } } 508# <- { "return": [ 509# { 510# "parameters": [ 511# { 512# "name": "romfile", 513# "type": "string" 514# }, 515# { 516# "name": "bootindex", 517# "type": "number" 518# } 519# ], 520# "option": "option-rom" 521# } 522# ] 523# } 524# 525## 526{'command': 'query-command-line-options', 527 'data': { '*option': 'str' }, 528 'returns': ['CommandLineOptionInfo'], 529 'allow-preconfig': true } 530 531## 532# @RTC_CHANGE: 533# 534# Emitted when the guest changes the RTC time. 535# 536# @offset: offset in seconds between base RTC clock (as specified 537# by -rtc base), and new RTC clock value 538# 539# @qom-path: path to the RTC object in the QOM tree 540# 541# Note: This event is rate-limited. 542# It is not guaranteed that the RTC in the system implements 543# this event, or even that the system has an RTC at all. 544# 545# Since: 0.13 546# 547# Example: 548# 549# <- { "event": "RTC_CHANGE", 550# "data": { "offset": 78 }, 551# "timestamp": { "seconds": 1267020223, "microseconds": 435656 } } 552# 553## 554{ 'event': 'RTC_CHANGE', 555 'data': { 'offset': 'int', 'qom-path': 'str' } } 556 557## 558# @VFU_CLIENT_HANGUP: 559# 560# Emitted when the client of a TYPE_VFIO_USER_SERVER closes the 561# communication channel 562# 563# @vfu-id: ID of the TYPE_VFIO_USER_SERVER object. It is the last component 564# of @vfu-qom-path referenced below 565# 566# @vfu-qom-path: path to the TYPE_VFIO_USER_SERVER object in the QOM tree 567# 568# @dev-id: ID of attached PCI device 569# 570# @dev-qom-path: path to attached PCI device in the QOM tree 571# 572# Since: 7.1 573# 574# Example: 575# 576# <- { "event": "VFU_CLIENT_HANGUP", 577# "data": { "vfu-id": "vfu1", 578# "vfu-qom-path": "/objects/vfu1", 579# "dev-id": "sas1", 580# "dev-qom-path": "/machine/peripheral/sas1" }, 581# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } } 582# 583## 584{ 'event': 'VFU_CLIENT_HANGUP', 585 'data': { 'vfu-id': 'str', 'vfu-qom-path': 'str', 586 'dev-id': 'str', 'dev-qom-path': 'str' } } 587