qemu/qapi/char.json
<<
>>
Prefs
   1# -*- Mode: Python -*-
   2#
   3
   4##
   5# = Character devices
   6##
   7
   8{ 'include': 'sockets.json' }
   9
  10##
  11# @ChardevInfo:
  12#
  13# Information about a character device.
  14#
  15# @label: the label of the character device
  16#
  17# @filename: the filename of the character device
  18#
  19# @frontend-open: shows whether the frontend device attached to this backend
  20#                 (eg. with the chardev=... option) is in open or closed state
  21#                 (since 2.1)
  22#
  23# Notes: @filename is encoded using the QEMU command line character device
  24#        encoding.  See the QEMU man page for details.
  25#
  26# Since: 0.14.0
  27##
  28{ 'struct': 'ChardevInfo', 'data': {'label': 'str',
  29                                  'filename': 'str',
  30                                  'frontend-open': 'bool'} }
  31
  32##
  33# @query-chardev:
  34#
  35# Returns information about current character devices.
  36#
  37# Returns: a list of @ChardevInfo
  38#
  39# Since: 0.14.0
  40#
  41# Example:
  42#
  43# -> { "execute": "query-chardev" }
  44# <- {
  45#       "return": [
  46#          {
  47#             "label": "charchannel0",
  48#             "filename": "unix:/var/lib/libvirt/qemu/seabios.rhel6.agent,server",
  49#             "frontend-open": false
  50#          },
  51#          {
  52#             "label": "charmonitor",
  53#             "filename": "unix:/var/lib/libvirt/qemu/seabios.rhel6.monitor,server",
  54#             "frontend-open": true
  55#          },
  56#          {
  57#             "label": "charserial0",
  58#             "filename": "pty:/dev/pts/2",
  59#             "frontend-open": true
  60#          }
  61#       ]
  62#    }
  63#
  64##
  65{ 'command': 'query-chardev', 'returns': ['ChardevInfo'] }
  66
  67##
  68# @ChardevBackendInfo:
  69#
  70# Information about a character device backend
  71#
  72# @name: The backend name
  73#
  74# Since: 2.0
  75##
  76{ 'struct': 'ChardevBackendInfo', 'data': {'name': 'str'} }
  77
  78##
  79# @query-chardev-backends:
  80#
  81# Returns information about character device backends.
  82#
  83# Returns: a list of @ChardevBackendInfo
  84#
  85# Since: 2.0
  86#
  87# Example:
  88#
  89# -> { "execute": "query-chardev-backends" }
  90# <- {
  91#       "return":[
  92#          {
  93#             "name":"udp"
  94#          },
  95#          {
  96#             "name":"tcp"
  97#          },
  98#          {
  99#             "name":"unix"
 100#          },
 101#          {
 102#             "name":"spiceport"
 103#          }
 104#       ]
 105#    }
 106#
 107##
 108{ 'command': 'query-chardev-backends', 'returns': ['ChardevBackendInfo'] }
 109
 110##
 111# @DataFormat:
 112#
 113# An enumeration of data format.
 114#
 115# @utf8: Data is a UTF-8 string (RFC 3629)
 116#
 117# @base64: Data is Base64 encoded binary (RFC 3548)
 118#
 119# Since: 1.4
 120##
 121{ 'enum': 'DataFormat',
 122  'data': [ 'utf8', 'base64' ] }
 123
 124##
 125# @ringbuf-write:
 126#
 127# Write to a ring buffer character device.
 128#
 129# @device: the ring buffer character device name
 130#
 131# @data: data to write
 132#
 133# @format: data encoding (default 'utf8').
 134#          - base64: data must be base64 encoded text.  Its binary
 135#            decoding gets written.
 136#          - utf8: data's UTF-8 encoding is written
 137#          - data itself is always Unicode regardless of format, like
 138#            any other string.
 139#
 140# Returns: Nothing on success
 141#
 142# Since: 1.4
 143#
 144# Example:
 145#
 146# -> { "execute": "ringbuf-write",
 147#      "arguments": { "device": "foo",
 148#                     "data": "abcdefgh",
 149#                     "format": "utf8" } }
 150# <- { "return": {} }
 151#
 152##
 153{ 'command': 'ringbuf-write',
 154  'data': {'device': 'str', 'data': 'str',
 155           '*format': 'DataFormat'} }
 156
 157##
 158# @ringbuf-read:
 159#
 160# Read from a ring buffer character device.
 161#
 162# @device: the ring buffer character device name
 163#
 164# @size: how many bytes to read at most
 165#
 166# @format: data encoding (default 'utf8').
 167#          - base64: the data read is returned in base64 encoding.
 168#          - utf8: the data read is interpreted as UTF-8.
 169#            Bug: can screw up when the buffer contains invalid UTF-8
 170#            sequences, NUL characters, after the ring buffer lost
 171#            data, and when reading stops because the size limit is
 172#            reached.
 173#          - The return value is always Unicode regardless of format,
 174#            like any other string.
 175#
 176# Returns: data read from the device
 177#
 178# Since: 1.4
 179#
 180# Example:
 181#
 182# -> { "execute": "ringbuf-read",
 183#      "arguments": { "device": "foo",
 184#                     "size": 1000,
 185#                     "format": "utf8" } }
 186# <- { "return": "abcdefgh" }
 187#
 188##
 189{ 'command': 'ringbuf-read',
 190  'data': {'device': 'str', 'size': 'int', '*format': 'DataFormat'},
 191  'returns': 'str' }
 192
 193##
 194# @ChardevCommon:
 195#
 196# Configuration shared across all chardev backends
 197#
 198# @logfile: The name of a logfile to save output
 199# @logappend: true to append instead of truncate
 200#             (default to false to truncate)
 201#
 202# Since: 2.6
 203##
 204{ 'struct': 'ChardevCommon', 'data': { '*logfile': 'str',
 205                                       '*logappend': 'bool' } }
 206
 207##
 208# @ChardevFile:
 209#
 210# Configuration info for file chardevs.
 211#
 212# @in:  The name of the input file
 213# @out: The name of the output file
 214# @append: Open the file in append mode (default false to
 215#          truncate) (Since 2.6)
 216#
 217# Since: 1.4
 218##
 219{ 'struct': 'ChardevFile', 'data': { '*in' : 'str',
 220                                   'out' : 'str',
 221                                   '*append': 'bool' },
 222  'base': 'ChardevCommon' }
 223
 224##
 225# @ChardevHostdev:
 226#
 227# Configuration info for device and pipe chardevs.
 228#
 229# @device: The name of the special file for the device,
 230#          i.e. /dev/ttyS0 on Unix or COM1: on Windows
 231#
 232# Since: 1.4
 233##
 234{ 'struct': 'ChardevHostdev', 'data': { 'device' : 'str' },
 235  'base': 'ChardevCommon' }
 236
 237##
 238# @ChardevSocket:
 239#
 240# Configuration info for (stream) socket chardevs.
 241#
 242# @addr: socket address to listen on (server=true)
 243#        or connect to (server=false)
 244# @tls-creds: the ID of the TLS credentials object (since 2.6)
 245# @server: create server socket (default: true)
 246# @wait: wait for incoming connection on server
 247#        sockets (default: false).
 248# @nodelay: set TCP_NODELAY socket option (default: false)
 249# @telnet: enable telnet protocol on server
 250#          sockets (default: false)
 251# @tn3270: enable tn3270 protocol on server
 252#          sockets (default: false) (Since: 2.10)
 253# @reconnect: For a client socket, if a socket is disconnected,
 254#          then attempt a reconnect after the given number of seconds.
 255#          Setting this to zero disables this function. (default: 0)
 256#          (Since: 2.2)
 257#
 258# Since: 1.4
 259##
 260{ 'struct': 'ChardevSocket', 'data': { 'addr'       : 'SocketAddressLegacy',
 261                                     '*tls-creds'  : 'str',
 262                                     '*server'    : 'bool',
 263                                     '*wait'      : 'bool',
 264                                     '*nodelay'   : 'bool',
 265                                     '*telnet'    : 'bool',
 266                                     '*tn3270'    : 'bool',
 267                                     '*reconnect' : 'int' },
 268  'base': 'ChardevCommon' }
 269
 270##
 271# @ChardevUdp:
 272#
 273# Configuration info for datagram socket chardevs.
 274#
 275# @remote: remote address
 276# @local: local address
 277#
 278# Since: 1.5
 279##
 280{ 'struct': 'ChardevUdp', 'data': { 'remote' : 'SocketAddressLegacy',
 281                                  '*local' : 'SocketAddressLegacy' },
 282  'base': 'ChardevCommon' }
 283
 284##
 285# @ChardevMux:
 286#
 287# Configuration info for mux chardevs.
 288#
 289# @chardev: name of the base chardev.
 290#
 291# Since: 1.5
 292##
 293{ 'struct': 'ChardevMux', 'data': { 'chardev' : 'str' },
 294  'base': 'ChardevCommon' }
 295
 296##
 297# @ChardevStdio:
 298#
 299# Configuration info for stdio chardevs.
 300#
 301# @signal: Allow signals (such as SIGINT triggered by ^C)
 302#          be delivered to qemu.  Default: true in -nographic mode,
 303#          false otherwise.
 304#
 305# Since: 1.5
 306##
 307{ 'struct': 'ChardevStdio', 'data': { '*signal' : 'bool' },
 308  'base': 'ChardevCommon' }
 309
 310
 311##
 312# @ChardevSpiceChannel:
 313#
 314# Configuration info for spice vm channel chardevs.
 315#
 316# @type: kind of channel (for example vdagent).
 317#
 318# Since: 1.5
 319##
 320{ 'struct': 'ChardevSpiceChannel', 'data': { 'type'  : 'str' },
 321  'base': 'ChardevCommon' }
 322
 323##
 324# @ChardevSpicePort:
 325#
 326# Configuration info for spice port chardevs.
 327#
 328# @fqdn: name of the channel (see docs/spice-port-fqdn.txt)
 329#
 330# Since: 1.5
 331##
 332{ 'struct': 'ChardevSpicePort', 'data': { 'fqdn'  : 'str' },
 333  'base': 'ChardevCommon' }
 334
 335##
 336# @ChardevVC:
 337#
 338# Configuration info for virtual console chardevs.
 339#
 340# @width:  console width,  in pixels
 341# @height: console height, in pixels
 342# @cols:   console width,  in chars
 343# @rows:   console height, in chars
 344#
 345# Since: 1.5
 346##
 347{ 'struct': 'ChardevVC', 'data': { '*width'  : 'int',
 348                                 '*height' : 'int',
 349                                 '*cols'   : 'int',
 350                                 '*rows'   : 'int' },
 351  'base': 'ChardevCommon' }
 352
 353##
 354# @ChardevRingbuf:
 355#
 356# Configuration info for ring buffer chardevs.
 357#
 358# @size: ring buffer size, must be power of two, default is 65536
 359#
 360# Since: 1.5
 361##
 362{ 'struct': 'ChardevRingbuf', 'data': { '*size'  : 'int' },
 363  'base': 'ChardevCommon' }
 364
 365##
 366# @ChardevBackend:
 367#
 368# Configuration info for the new chardev backend.
 369#
 370# Since: 1.4 (testdev since 2.2, wctablet since 2.9)
 371##
 372{ 'union': 'ChardevBackend', 'data': { 'file'   : 'ChardevFile',
 373                                       'serial' : 'ChardevHostdev',
 374                                       'parallel': 'ChardevHostdev',
 375                                       'pipe'   : 'ChardevHostdev',
 376                                       'socket' : 'ChardevSocket',
 377                                       'udp'    : 'ChardevUdp',
 378                                       'pty'    : 'ChardevCommon',
 379                                       'null'   : 'ChardevCommon',
 380                                       'mux'    : 'ChardevMux',
 381                                       'msmouse': 'ChardevCommon',
 382                                       'wctablet' : 'ChardevCommon',
 383                                       'braille': 'ChardevCommon',
 384                                       'testdev': 'ChardevCommon',
 385                                       'stdio'  : 'ChardevStdio',
 386                                       'console': 'ChardevCommon',
 387                                       'spicevmc' : 'ChardevSpiceChannel',
 388                                       'spiceport' : 'ChardevSpicePort',
 389                                       'vc'     : 'ChardevVC',
 390                                       'ringbuf': 'ChardevRingbuf',
 391                                       # next one is just for compatibility
 392                                       'memory' : 'ChardevRingbuf' } }
 393
 394##
 395# @ChardevReturn:
 396#
 397# Return info about the chardev backend just created.
 398#
 399# @pty: name of the slave pseudoterminal device, present if
 400#       and only if a chardev of type 'pty' was created
 401#
 402# Since: 1.4
 403##
 404{ 'struct' : 'ChardevReturn', 'data': { '*pty' : 'str' } }
 405
 406##
 407# @chardev-add:
 408#
 409# Add a character device backend
 410#
 411# @id: the chardev's ID, must be unique
 412# @backend: backend type and parameters
 413#
 414# Returns: ChardevReturn.
 415#
 416# Since: 1.4
 417#
 418# Example:
 419#
 420# -> { "execute" : "chardev-add",
 421#      "arguments" : { "id" : "foo",
 422#                      "backend" : { "type" : "null", "data" : {} } } }
 423# <- { "return": {} }
 424#
 425# -> { "execute" : "chardev-add",
 426#      "arguments" : { "id" : "bar",
 427#                      "backend" : { "type" : "file",
 428#                                    "data" : { "out" : "/tmp/bar.log" } } } }
 429# <- { "return": {} }
 430#
 431# -> { "execute" : "chardev-add",
 432#      "arguments" : { "id" : "baz",
 433#                      "backend" : { "type" : "pty", "data" : {} } } }
 434# <- { "return": { "pty" : "/dev/pty/42" } }
 435#
 436##
 437{ 'command': 'chardev-add', 'data': {'id'      : 'str',
 438                                     'backend' : 'ChardevBackend' },
 439  'returns': 'ChardevReturn' }
 440
 441##
 442# @chardev-change:
 443#
 444# Change a character device backend
 445#
 446# @id: the chardev's ID, must exist
 447# @backend: new backend type and parameters
 448#
 449# Returns: ChardevReturn.
 450#
 451# Since: 2.10
 452#
 453# Example:
 454#
 455# -> { "execute" : "chardev-change",
 456#      "arguments" : { "id" : "baz",
 457#                      "backend" : { "type" : "pty", "data" : {} } } }
 458# <- { "return": { "pty" : "/dev/pty/42" } }
 459#
 460# -> {"execute" : "chardev-change",
 461#     "arguments" : {
 462#         "id" : "charchannel2",
 463#         "backend" : {
 464#             "type" : "socket",
 465#             "data" : {
 466#                 "addr" : {
 467#                     "type" : "unix" ,
 468#                     "data" : {
 469#                         "path" : "/tmp/charchannel2.socket"
 470#                     }
 471#                  },
 472#                  "server" : true,
 473#                  "wait" : false }}}}
 474# <- {"return": {}}
 475#
 476##
 477{ 'command': 'chardev-change', 'data': {'id'      : 'str',
 478                                        'backend' : 'ChardevBackend' },
 479  'returns': 'ChardevReturn' }
 480
 481##
 482# @chardev-remove:
 483#
 484# Remove a character device backend
 485#
 486# @id: the chardev's ID, must exist and not be in use
 487#
 488# Returns: Nothing on success
 489#
 490# Since: 1.4
 491#
 492# Example:
 493#
 494# -> { "execute": "chardev-remove", "arguments": { "id" : "foo" } }
 495# <- { "return": {} }
 496#
 497##
 498{ 'command': 'chardev-remove', 'data': {'id': 'str'} }
 499
 500##
 501# @chardev-send-break:
 502#
 503# Send a break to a character device
 504#
 505# @id: the chardev's ID, must exist
 506#
 507# Returns: Nothing on success
 508#
 509# Since: 2.10
 510#
 511# Example:
 512#
 513# -> { "execute": "chardev-send-break", "arguments": { "id" : "foo" } }
 514# <- { "return": {} }
 515#
 516##
 517{ 'command': 'chardev-send-break', 'data': {'id': 'str'} }
 518
 519##
 520# @VSERPORT_CHANGE:
 521#
 522# Emitted when the guest opens or closes a virtio-serial port.
 523#
 524# @id: device identifier of the virtio-serial port
 525#
 526# @open: true if the guest has opened the virtio-serial port
 527#
 528# Since: 2.1
 529#
 530# Example:
 531#
 532# <- { "event": "VSERPORT_CHANGE",
 533#      "data": { "id": "channel0", "open": true },
 534#      "timestamp": { "seconds": 1401385907, "microseconds": 422329 } }
 535#
 536##
 537{ 'event': 'VSERPORT_CHANGE',
 538  'data': { 'id': 'str', 'open': 'bool' } }
 539