# -*- Mode: Python -*-
# vim: filetype=python
#

##
# = Character devices
##

{ 'include': 'sockets.json' }

##
# @ChardevInfo:
#
# Information about a character device.
#
# @label: the label of the character device
#
# @filename: the filename of the character device
#
# @frontend-open: shows whether the frontend device attached to this
#     backend (e.g. with the chardev=... option) is in open or closed
#     state (since 2.1)
#
# .. note:: @filename is encoded using the QEMU command line character
#    device encoding.  See the QEMU man page for details.
#
# Since: 0.14
##
{ 'struct': 'ChardevInfo',
  'data': { 'label': 'str',
            'filename': 'str',
            'frontend-open': 'bool' } }

##
# @query-chardev:
#
# Returns information about current character devices.
#
# Returns: a list of @ChardevInfo
#
# Since: 0.14
#
# .. qmp-example::
#
#     -> { "execute": "query-chardev" }
#     <- {
#           "return": [
#              {
#                 "label": "charchannel0",
#                 "filename": "unix:/var/lib/libvirt/qemu/seabios.rhel6.agent,server=on",
#                 "frontend-open": false
#              },
#              {
#                 "label": "charmonitor",
#                 "filename": "unix:/var/lib/libvirt/qemu/seabios.rhel6.monitor,server=on",
#                 "frontend-open": true
#              },
#              {
#                 "label": "charserial0",
#                 "filename": "pty:/dev/pts/2",
#                 "frontend-open": true
#              }
#           ]
#        }
##
{ 'command': 'query-chardev', 'returns': ['ChardevInfo'],
  'allow-preconfig': true }

##
# @ChardevBackendInfo:
#
# Information about a character device backend
#
# @name: The backend name
#
# Since: 2.0
##
{ 'struct': 'ChardevBackendInfo', 'data': {'name': 'str'} }

##
# @query-chardev-backends:
#
# Returns information about character device backends.
#
# Returns: a list of @ChardevBackendInfo
#
# Since: 2.0
#
# .. qmp-example::
#
#     -> { "execute": "query-chardev-backends" }
#     <- {
#           "return":[
#              {
#                 "name":"udp"
#              },
#              {
#                 "name":"tcp"
#              },
#              {
#                 "name":"unix"
#              },
#              {
#                 "name":"spiceport"
#              }
#           ]
#        }
##
{ 'command': 'query-chardev-backends', 'returns': ['ChardevBackendInfo'] }

##
# @DataFormat:
#
# An enumeration of data format.
#
# @utf8: Data is a UTF-8 string (RFC 3629)
#
# @base64: Data is Base64 encoded binary (RFC 3548)
#
# Since: 1.4
##
{ 'enum': 'DataFormat',
  'data': [ 'utf8', 'base64' ] }

##
# @ringbuf-write:
#
# Write to a ring buffer character device.
#
# @device: the ring buffer character device name
#
# @data: data to write
#
# @format: data encoding (default 'utf8').
#
#     - base64: data must be base64 encoded text.  Its binary decoding
#       gets written.
#     - utf8: data's UTF-8 encoding is written
#     - data itself is always Unicode regardless of format, like any
#       other string.
#
# Since: 1.4
#
# .. qmp-example::
#
#     -> { "execute": "ringbuf-write",
#          "arguments": { "device": "foo",
#                         "data": "abcdefgh",
#                         "format": "utf8" } }
#     <- { "return": {} }
##
{ 'command': 'ringbuf-write',
  'data': { 'device': 'str',
            'data': 'str',
           '*format': 'DataFormat'} }

##
# @ringbuf-read:
#
# Read from a ring buffer character device.
#
# @device: the ring buffer character device name
#
# @size: how many bytes to read at most
#
# @format: data encoding (default 'utf8').
#
#     - base64: the data read is returned in base64 encoding.
#     - utf8: the data read is interpreted as UTF-8.
#       Bug: can screw up when the buffer contains invalid UTF-8
#       sequences, NUL characters, after the ring buffer lost data,
#       and when reading stops because the size limit is reached.
#     - The return value is always Unicode regardless of format, like
#       any other string.
#
# Returns: data read from the device
#
# Since: 1.4
#
# .. qmp-example::
#
#     -> { "execute": "ringbuf-read",
#          "arguments": { "device": "foo",
#                         "size": 1000,
#                         "format": "utf8" } }
#     <- { "return": "abcdefgh" }
##
{ 'command': 'ringbuf-read',
  'data': {'device': 'str', 'size': 'int', '*format': 'DataFormat'},
  'returns': 'str' }

##
# @ChardevCommon:
#
# Configuration shared across all chardev backends
#
# @logfile: The name of a logfile to save output
#
# @logappend: true to append instead of truncate (default to false to
#     truncate)
#
# Since: 2.6
##
{ 'struct': 'ChardevCommon',
  'data': { '*logfile': 'str',
            '*logappend': 'bool' } }

##
# @ChardevFile:
#
# Configuration info for file chardevs.
#
# @in: The name of the input file
#
# @out: The name of the output file
#
# @append: Open the file in append mode (default false to truncate)
#     (Since 2.6)
#
# Since: 1.4
##
{ 'struct': 'ChardevFile',
  'data': { '*in': 'str',
            'out': 'str',
            '*append': 'bool' },
  'base': 'ChardevCommon' }

##
# @ChardevHostdev:
#
# Configuration info for device and pipe chardevs.
#
# @device: The name of the special file for the device, i.e.
#     /dev/ttyS0 on Unix or COM1: on Windows
#
# Since: 1.4
##
{ 'struct': 'ChardevHostdev',
  'data': { 'device': 'str' },
  'base': 'ChardevCommon' }

##
# @ChardevSocket:
#
# Configuration info for (stream) socket chardevs.
#
# @addr: socket address to listen on (server=true) or connect to
#     (server=false)
#
# @tls-creds: the ID of the TLS credentials object (since 2.6)
#
# @tls-authz: the ID of the QAuthZ authorization object against which
#     the client's x509 distinguished name will be validated.  This
#     object is only resolved at time of use, so can be deleted and
#     recreated on the fly while the chardev server is active.  If
#     missing, it will default to denying access (since 4.0)
#
# @server: create server socket (default: true)
#
# @wait: wait for incoming connection on server sockets (default:
#     false).  Silently ignored with server: false.  This use is
#     deprecated.
#
# @nodelay: set TCP_NODELAY socket option (default: false)
#
# @telnet: enable telnet protocol on server sockets (default: false)
#
# @tn3270: enable tn3270 protocol on server sockets (default: false)
#     (Since: 2.10)
#
# @websocket: enable websocket protocol on server sockets
#     (default: false) (Since: 3.1)
#
# @reconnect: For a client socket, if a socket is disconnected, then
#     attempt a reconnect after the given number of seconds.  Setting
#     this to zero disables this function.  (default: 0) (Since: 2.2)
#
# Since: 1.4
##
{ 'struct': 'ChardevSocket',
  'data': { 'addr': 'SocketAddressLegacy',
            '*tls-creds': 'str',
            '*tls-authz'  : 'str',
            '*server': 'bool',
            '*wait': 'bool',
            '*nodelay': 'bool',
            '*telnet': 'bool',
            '*tn3270': 'bool',
            '*websocket': 'bool',
            '*reconnect': 'int' },
  'base': 'ChardevCommon' }

##
# @ChardevUdp:
#
# Configuration info for datagram socket chardevs.
#
# @remote: remote address
#
# @local: local address
#
# Since: 1.5
##
{ 'struct': 'ChardevUdp',
  'data': { 'remote': 'SocketAddressLegacy',
            '*local': 'SocketAddressLegacy' },
  'base': 'ChardevCommon' }

##
# @ChardevMux:
#
# Configuration info for mux chardevs.
#
# @chardev: name of the base chardev.
#
# Since: 1.5
##
{ 'struct': 'ChardevMux',
  'data': { 'chardev': 'str' },
  'base': 'ChardevCommon' }

##
# @ChardevStdio:
#
# Configuration info for stdio chardevs.
#
# @signal: Allow signals (such as SIGINT triggered by ^C) be delivered
#     to qemu.  Default: true.
#
# Since: 1.5
##
{ 'struct': 'ChardevStdio',
  'data': { '*signal': 'bool' },
  'base': 'ChardevCommon' }

##
# @ChardevSpiceChannel:
#
# Configuration info for spice vm channel chardevs.
#
# @type: kind of channel (for example vdagent).
#
# Since: 1.5
##
{ 'struct': 'ChardevSpiceChannel',
  'data': { 'type': 'str' },
  'base': 'ChardevCommon',
  'if': 'CONFIG_SPICE' }

##
# @ChardevSpicePort:
#
# Configuration info for spice port chardevs.
#
# @fqdn: name of the channel (see docs/spice-port-fqdn.txt)
#
# Since: 1.5
##
{ 'struct': 'ChardevSpicePort',
  'data': { 'fqdn': 'str' },
  'base': 'ChardevCommon',
  'if': 'CONFIG_SPICE' }

##
# @ChardevDBus:
#
# Configuration info for DBus chardevs.
#
# @name: name of the channel (following docs/spice-port-fqdn.txt)
#
# Since: 7.0
##
{ 'struct': 'ChardevDBus',
  'data': { 'name': 'str' },
  'base': 'ChardevCommon',
  'if': 'CONFIG_DBUS_DISPLAY' }

##
# @ChardevVC:
#
# Configuration info for virtual console chardevs.
#
# @width: console width, in pixels
#
# @height: console height, in pixels
#
# @cols: console width, in chars
#
# @rows: console height, in chars
#
# .. note:: The options are only effective when the VNC or SDL
#    graphical display backend is active.  They are ignored with the
#    GTK, Spice, VNC and D-Bus display backends.
#
# Since: 1.5
##
{ 'struct': 'ChardevVC',
  'data': { '*width': 'int',
            '*height': 'int',
            '*cols': 'int',
            '*rows': 'int' },
  'base': 'ChardevCommon' }

##
# @ChardevRingbuf:
#
# Configuration info for ring buffer chardevs.
#
# @size: ring buffer size, must be power of two, default is 65536
#
# Since: 1.5
##
{ 'struct': 'ChardevRingbuf',
  'data': { '*size': 'int' },
  'base': 'ChardevCommon' }

##
# @ChardevQemuVDAgent:
#
# Configuration info for qemu vdagent implementation.
#
# @mouse: enable/disable mouse, default is enabled.
#
# @clipboard: enable/disable clipboard, default is disabled.
#
# Since: 6.1
##
{ 'struct': 'ChardevQemuVDAgent',
  'data': { '*mouse': 'bool',
            '*clipboard': 'bool' },
  'base': 'ChardevCommon',
  'if': 'CONFIG_SPICE_PROTOCOL' }

##
# @ChardevBackendKind:
#
# @pipe: Since 1.5
#
# @udp: Since 1.5
#
# @mux: Since 1.5
#
# @msmouse: Since 1.5
#
# @wctablet: Since 2.9
#
# @braille: Since 1.5
#
# @testdev: Since 2.2
#
# @stdio: Since 1.5
#
# @console: Since 1.5
#
# @spicevmc: Since 1.5
#
# @spiceport: Since 1.5
#
# @qemu-vdagent: Since 6.1
#
# @dbus: Since 7.0
#
# @vc: v1.5
#
# @ringbuf: Since 1.6
#
# @memory: Since 1.5
#
# Features:
#
# @deprecated: Member @memory is deprecated.  Use @ringbuf instead.
#
# Since: 1.4
##
{ 'enum': 'ChardevBackendKind',
  'data': [ 'file',
            { 'name': 'serial', 'if': 'HAVE_CHARDEV_SERIAL' },
            { 'name': 'parallel', 'if': 'HAVE_CHARDEV_PARALLEL' },
            'pipe',
            'socket',
            'udp',
            'pty',
            'null',
            'mux',
            'msmouse',
            'wctablet',
            { 'name': 'braille', 'if': 'CONFIG_BRLAPI' },
            'testdev',
            'stdio',
            { 'name': 'console', 'if': 'CONFIG_WIN32' },
            { 'name': 'spicevmc', 'if': 'CONFIG_SPICE' },
            { 'name': 'spiceport', 'if': 'CONFIG_SPICE' },
            { 'name': 'qemu-vdagent', 'if': 'CONFIG_SPICE_PROTOCOL' },
            { 'name': 'dbus', 'if': 'CONFIG_DBUS_DISPLAY' },
            'vc',
            'ringbuf',
            { 'name': 'memory', 'features': [ 'deprecated' ] } ] }

##
# @ChardevFileWrapper:
#
# @data: Configuration info for file chardevs
#
# Since: 1.4
##
{ 'struct': 'ChardevFileWrapper',
  'data': { 'data': 'ChardevFile' } }

##
# @ChardevHostdevWrapper:
#
# @data: Configuration info for device and pipe chardevs
#
# Since: 1.4
##
{ 'struct': 'ChardevHostdevWrapper',
  'data': { 'data': 'ChardevHostdev' } }

##
# @ChardevSocketWrapper:
#
# @data: Configuration info for (stream) socket chardevs
#
# Since: 1.4
##
{ 'struct': 'ChardevSocketWrapper',
  'data': { 'data': 'ChardevSocket' } }

##
# @ChardevUdpWrapper:
#
# @data: Configuration info for datagram socket chardevs
#
# Since: 1.5
##
{ 'struct': 'ChardevUdpWrapper',
  'data': { 'data': 'ChardevUdp' } }

##
# @ChardevCommonWrapper:
#
# @data: Configuration shared across all chardev backends
#
# Since: 2.6
##
{ 'struct': 'ChardevCommonWrapper',
  'data': { 'data': 'ChardevCommon' } }

##
# @ChardevMuxWrapper:
#
# @data: Configuration info for mux chardevs
#
# Since: 1.5
##
{ 'struct': 'ChardevMuxWrapper',
  'data': { 'data': 'ChardevMux' } }

##
# @ChardevStdioWrapper:
#
# @data: Configuration info for stdio chardevs
#
# Since: 1.5
##
{ 'struct': 'ChardevStdioWrapper',
  'data': { 'data': 'ChardevStdio' } }

##
# @ChardevSpiceChannelWrapper:
#
# @data: Configuration info for spice vm channel chardevs
#
# Since: 1.5
##
{ 'struct': 'ChardevSpiceChannelWrapper',
  'data': { 'data': 'ChardevSpiceChannel' },
  'if': 'CONFIG_SPICE' }

##
# @ChardevSpicePortWrapper:
#
# @data: Configuration info for spice port chardevs
#
# Since: 1.5
##
{ 'struct': 'ChardevSpicePortWrapper',
  'data': { 'data': 'ChardevSpicePort' },
  'if': 'CONFIG_SPICE' }

##
# @ChardevQemuVDAgentWrapper:
#
# @data: Configuration info for qemu vdagent implementation
#
# Since: 6.1
##
{ 'struct': 'ChardevQemuVDAgentWrapper',
  'data': { 'data': 'ChardevQemuVDAgent' },
  'if': 'CONFIG_SPICE_PROTOCOL' }

##
# @ChardevDBusWrapper:
#
# @data: Configuration info for DBus chardevs
#
# Since: 7.0
##
{ 'struct': 'ChardevDBusWrapper',
  'data': { 'data': 'ChardevDBus' },
  'if': 'CONFIG_DBUS_DISPLAY' }

##
# @ChardevVCWrapper:
#
# @data: Configuration info for virtual console chardevs
#
# Since: 1.5
##
{ 'struct': 'ChardevVCWrapper',
  'data': { 'data': 'ChardevVC' } }

##
# @ChardevRingbufWrapper:
#
# @data: Configuration info for ring buffer chardevs
#
# Since: 1.5
##
{ 'struct': 'ChardevRingbufWrapper',
  'data': { 'data': 'ChardevRingbuf' } }

##
# @ChardevBackend:
#
# Configuration info for the new chardev backend.
#
# @type: backend type
#
# Since: 1.4
##
{ 'union': 'ChardevBackend',
  'base': { 'type': 'ChardevBackendKind' },
  'discriminator': 'type',
  'data': { 'file': 'ChardevFileWrapper',
            'serial': { 'type': 'ChardevHostdevWrapper',
                        'if': 'HAVE_CHARDEV_SERIAL' },
            'parallel': { 'type': 'ChardevHostdevWrapper',
                          'if': 'HAVE_CHARDEV_PARALLEL' },
            'pipe': 'ChardevHostdevWrapper',
            'socket': 'ChardevSocketWrapper',
            'udp': 'ChardevUdpWrapper',
            'pty': 'ChardevCommonWrapper',
            'null': 'ChardevCommonWrapper',
            'mux': 'ChardevMuxWrapper',
            'msmouse': 'ChardevCommonWrapper',
            'wctablet': 'ChardevCommonWrapper',
            'braille': { 'type': 'ChardevCommonWrapper',
                         'if': 'CONFIG_BRLAPI' },
            'testdev': 'ChardevCommonWrapper',
            'stdio': 'ChardevStdioWrapper',
            'console': { 'type': 'ChardevCommonWrapper',
                         'if': 'CONFIG_WIN32' },
            'spicevmc': { 'type': 'ChardevSpiceChannelWrapper',
                          'if': 'CONFIG_SPICE' },
            'spiceport': { 'type': 'ChardevSpicePortWrapper',
                           'if': 'CONFIG_SPICE' },
            'qemu-vdagent': { 'type': 'ChardevQemuVDAgentWrapper',
                              'if': 'CONFIG_SPICE_PROTOCOL' },
            'dbus': { 'type': 'ChardevDBusWrapper',
                      'if': 'CONFIG_DBUS_DISPLAY' },
            'vc': 'ChardevVCWrapper',
            'ringbuf': 'ChardevRingbufWrapper',
            'memory': 'ChardevRingbufWrapper' } }

##
# @ChardevReturn:
#
# Return info about the chardev backend just created.
#
# @pty: name of the slave pseudoterminal device, present if and only
#     if a chardev of type 'pty' was created
#
# Since: 1.4
##
{ 'struct' : 'ChardevReturn',
  'data': { '*pty': 'str' } }

##
# @chardev-add:
#
# Add a character device backend
#
# @id: the chardev's ID, must be unique
#
# @backend: backend type and parameters
#
# Returns: ChardevReturn.
#
# Since: 1.4
#
# .. qmp-example::
#
#     -> { "execute" : "chardev-add",
#          "arguments" : { "id" : "foo",
#                          "backend" : { "type" : "null", "data" : {} } } }
#     <- { "return": {} }
#
# .. qmp-example::
#
#     -> { "execute" : "chardev-add",
#          "arguments" : { "id" : "bar",
#                          "backend" : { "type" : "file",
#                                        "data" : { "out" : "/tmp/bar.log" } } } }
#     <- { "return": {} }
#
# .. qmp-example::
#
#     -> { "execute" : "chardev-add",
#          "arguments" : { "id" : "baz",
#                          "backend" : { "type" : "pty", "data" : {} } } }
#     <- { "return": { "pty" : "/dev/pty/42" } }
##
{ 'command': 'chardev-add',
  'data': { 'id': 'str',
            'backend': 'ChardevBackend' },
  'returns': 'ChardevReturn' }

##
# @chardev-change:
#
# Change a character device backend
#
# @id: the chardev's ID, must exist
#
# @backend: new backend type and parameters
#
# Returns: ChardevReturn.
#
# Since: 2.10
#
# .. qmp-example::
#
#     -> { "execute" : "chardev-change",
#          "arguments" : { "id" : "baz",
#                          "backend" : { "type" : "pty", "data" : {} } } }
#     <- { "return": { "pty" : "/dev/pty/42" } }
#
# .. qmp-example::
#
#     -> {"execute" : "chardev-change",
#         "arguments" : {
#             "id" : "charchannel2",
#             "backend" : {
#                 "type" : "socket",
#                 "data" : {
#                     "addr" : {
#                         "type" : "unix" ,
#                         "data" : {
#                             "path" : "/tmp/charchannel2.socket"
#                         }
#                      },
#                      "server" : true,
#                      "wait" : false }}}}
#     <- {"return": {}}
##
{ 'command': 'chardev-change',
  'data': { 'id': 'str',
            'backend': 'ChardevBackend' },
  'returns': 'ChardevReturn' }

##
# @chardev-remove:
#
# Remove a character device backend
#
# @id: the chardev's ID, must exist and not be in use
#
# Since: 1.4
#
# .. qmp-example::
#
#     -> { "execute": "chardev-remove", "arguments": { "id" : "foo" } }
#     <- { "return": {} }
##
{ 'command': 'chardev-remove',
  'data': { 'id': 'str' } }

##
# @chardev-send-break:
#
# Send a break to a character device
#
# @id: the chardev's ID, must exist
#
# Since: 2.10
#
# .. qmp-example::
#
#     -> { "execute": "chardev-send-break", "arguments": { "id" : "foo" } }
#     <- { "return": {} }
##
{ 'command': 'chardev-send-break',
  'data': { 'id': 'str' } }

##
# @VSERPORT_CHANGE:
#
# Emitted when the guest opens or closes a virtio-serial port.
#
# @id: device identifier of the virtio-serial port
#
# @open: true if the guest has opened the virtio-serial port
#
# .. note:: This event is rate-limited.
#
# Since: 2.1
#
# .. qmp-example::
#
#     <- { "event": "VSERPORT_CHANGE",
#          "data": { "id": "channel0", "open": true },
#          "timestamp": { "seconds": 1401385907, "microseconds": 422329 } }
##
{ 'event': 'VSERPORT_CHANGE',
  'data': { 'id': 'str',
            'open': 'bool' } }
