1dbeee392SMarkus Armbruster# -*- Mode: Python -*- 2f7160f32SAndrea Bolognani# vim: filetype=python 3dbeee392SMarkus Armbruster# 4dbeee392SMarkus Armbruster 5dbeee392SMarkus Armbruster## 6dbeee392SMarkus Armbruster# = Character devices 7dbeee392SMarkus Armbruster## 8dbeee392SMarkus Armbruster 9dbeee392SMarkus Armbruster{ 'include': 'sockets.json' } 10dbeee392SMarkus Armbruster 11dbeee392SMarkus Armbruster## 12dbeee392SMarkus Armbruster# @ChardevInfo: 13dbeee392SMarkus Armbruster# 14dbeee392SMarkus Armbruster# Information about a character device. 15dbeee392SMarkus Armbruster# 16dbeee392SMarkus Armbruster# @label: the label of the character device 17dbeee392SMarkus Armbruster# 18dbeee392SMarkus Armbruster# @filename: the filename of the character device 19dbeee392SMarkus Armbruster# 20dbeee392SMarkus Armbruster# @frontend-open: shows whether the frontend device attached to this backend 21dbeee392SMarkus Armbruster# (eg. with the chardev=... option) is in open or closed state 22dbeee392SMarkus Armbruster# (since 2.1) 23dbeee392SMarkus Armbruster# 24dbeee392SMarkus Armbruster# Notes: @filename is encoded using the QEMU command line character device 25dbeee392SMarkus Armbruster# encoding. See the QEMU man page for details. 26dbeee392SMarkus Armbruster# 279bc6e893SMarkus Armbruster# Since: 0.14 28dbeee392SMarkus Armbruster## 29b0ddeba2SMarc-André Lureau{ 'struct': 'ChardevInfo', 30b0ddeba2SMarc-André Lureau 'data': { 'label': 'str', 31dbeee392SMarkus Armbruster 'filename': 'str', 32dbeee392SMarkus Armbruster 'frontend-open': 'bool' } } 33dbeee392SMarkus Armbruster 34dbeee392SMarkus Armbruster## 35dbeee392SMarkus Armbruster# @query-chardev: 36dbeee392SMarkus Armbruster# 37dbeee392SMarkus Armbruster# Returns information about current character devices. 38dbeee392SMarkus Armbruster# 39dbeee392SMarkus Armbruster# Returns: a list of @ChardevInfo 40dbeee392SMarkus Armbruster# 419bc6e893SMarkus Armbruster# Since: 0.14 42dbeee392SMarkus Armbruster# 43dbeee392SMarkus Armbruster# Example: 44dbeee392SMarkus Armbruster# 45dbeee392SMarkus Armbruster# -> { "execute": "query-chardev" } 46dbeee392SMarkus Armbruster# <- { 47dbeee392SMarkus Armbruster# "return": [ 48dbeee392SMarkus Armbruster# { 49dbeee392SMarkus Armbruster# "label": "charchannel0", 509d902d51SPaolo Bonzini# "filename": "unix:/var/lib/libvirt/qemu/seabios.rhel6.agent,server=on", 51dbeee392SMarkus Armbruster# "frontend-open": false 52dbeee392SMarkus Armbruster# }, 53dbeee392SMarkus Armbruster# { 54dbeee392SMarkus Armbruster# "label": "charmonitor", 559d902d51SPaolo Bonzini# "filename": "unix:/var/lib/libvirt/qemu/seabios.rhel6.monitor,server=on", 56dbeee392SMarkus Armbruster# "frontend-open": true 57dbeee392SMarkus Armbruster# }, 58dbeee392SMarkus Armbruster# { 59dbeee392SMarkus Armbruster# "label": "charserial0", 60dbeee392SMarkus Armbruster# "filename": "pty:/dev/pts/2", 61dbeee392SMarkus Armbruster# "frontend-open": true 62dbeee392SMarkus Armbruster# } 63dbeee392SMarkus Armbruster# ] 64dbeee392SMarkus Armbruster# } 65dbeee392SMarkus Armbruster# 66dbeee392SMarkus Armbruster## 67a87706c8SIgor Mammedov{ 'command': 'query-chardev', 'returns': ['ChardevInfo'], 68a87706c8SIgor Mammedov 'allow-preconfig': true } 69dbeee392SMarkus Armbruster 70dbeee392SMarkus Armbruster## 71dbeee392SMarkus Armbruster# @ChardevBackendInfo: 72dbeee392SMarkus Armbruster# 73dbeee392SMarkus Armbruster# Information about a character device backend 74dbeee392SMarkus Armbruster# 75dbeee392SMarkus Armbruster# @name: The backend name 76dbeee392SMarkus Armbruster# 77dbeee392SMarkus Armbruster# Since: 2.0 78dbeee392SMarkus Armbruster## 79dbeee392SMarkus Armbruster{ 'struct': 'ChardevBackendInfo', 'data': {'name': 'str'} } 80dbeee392SMarkus Armbruster 81dbeee392SMarkus Armbruster## 82dbeee392SMarkus Armbruster# @query-chardev-backends: 83dbeee392SMarkus Armbruster# 84dbeee392SMarkus Armbruster# Returns information about character device backends. 85dbeee392SMarkus Armbruster# 86dbeee392SMarkus Armbruster# Returns: a list of @ChardevBackendInfo 87dbeee392SMarkus Armbruster# 88dbeee392SMarkus Armbruster# Since: 2.0 89dbeee392SMarkus Armbruster# 90dbeee392SMarkus Armbruster# Example: 91dbeee392SMarkus Armbruster# 92dbeee392SMarkus Armbruster# -> { "execute": "query-chardev-backends" } 93dbeee392SMarkus Armbruster# <- { 94dbeee392SMarkus Armbruster# "return":[ 95dbeee392SMarkus Armbruster# { 96dbeee392SMarkus Armbruster# "name":"udp" 97dbeee392SMarkus Armbruster# }, 98dbeee392SMarkus Armbruster# { 99dbeee392SMarkus Armbruster# "name":"tcp" 100dbeee392SMarkus Armbruster# }, 101dbeee392SMarkus Armbruster# { 102dbeee392SMarkus Armbruster# "name":"unix" 103dbeee392SMarkus Armbruster# }, 104dbeee392SMarkus Armbruster# { 105dbeee392SMarkus Armbruster# "name":"spiceport" 106dbeee392SMarkus Armbruster# } 107dbeee392SMarkus Armbruster# ] 108dbeee392SMarkus Armbruster# } 109dbeee392SMarkus Armbruster# 110dbeee392SMarkus Armbruster## 111dbeee392SMarkus Armbruster{ 'command': 'query-chardev-backends', 'returns': ['ChardevBackendInfo'] } 112dbeee392SMarkus Armbruster 113dbeee392SMarkus Armbruster## 114dbeee392SMarkus Armbruster# @DataFormat: 115dbeee392SMarkus Armbruster# 116dbeee392SMarkus Armbruster# An enumeration of data format. 117dbeee392SMarkus Armbruster# 118dbeee392SMarkus Armbruster# @utf8: Data is a UTF-8 string (RFC 3629) 119dbeee392SMarkus Armbruster# 120dbeee392SMarkus Armbruster# @base64: Data is Base64 encoded binary (RFC 3548) 121dbeee392SMarkus Armbruster# 122dbeee392SMarkus Armbruster# Since: 1.4 123dbeee392SMarkus Armbruster## 124dbeee392SMarkus Armbruster{ 'enum': 'DataFormat', 125dbeee392SMarkus Armbruster 'data': [ 'utf8', 'base64' ] } 126dbeee392SMarkus Armbruster 127dbeee392SMarkus Armbruster## 128dbeee392SMarkus Armbruster# @ringbuf-write: 129dbeee392SMarkus Armbruster# 130dbeee392SMarkus Armbruster# Write to a ring buffer character device. 131dbeee392SMarkus Armbruster# 132dbeee392SMarkus Armbruster# @device: the ring buffer character device name 133dbeee392SMarkus Armbruster# 134dbeee392SMarkus Armbruster# @data: data to write 135dbeee392SMarkus Armbruster# 136dbeee392SMarkus Armbruster# @format: data encoding (default 'utf8'). 137100cc4feSPeter Maydell# 138dbeee392SMarkus Armbruster# - base64: data must be base64 encoded text. Its binary 139dbeee392SMarkus Armbruster# decoding gets written. 140dbeee392SMarkus Armbruster# - utf8: data's UTF-8 encoding is written 141dbeee392SMarkus Armbruster# - data itself is always Unicode regardless of format, like 142dbeee392SMarkus Armbruster# any other string. 143dbeee392SMarkus Armbruster# 144dbeee392SMarkus Armbruster# Returns: Nothing on success 145dbeee392SMarkus Armbruster# 146dbeee392SMarkus Armbruster# Since: 1.4 147dbeee392SMarkus Armbruster# 148dbeee392SMarkus Armbruster# Example: 149dbeee392SMarkus Armbruster# 150dbeee392SMarkus Armbruster# -> { "execute": "ringbuf-write", 151dbeee392SMarkus Armbruster# "arguments": { "device": "foo", 152dbeee392SMarkus Armbruster# "data": "abcdefgh", 153dbeee392SMarkus Armbruster# "format": "utf8" } } 154dbeee392SMarkus Armbruster# <- { "return": {} } 155dbeee392SMarkus Armbruster# 156dbeee392SMarkus Armbruster## 157dbeee392SMarkus Armbruster{ 'command': 'ringbuf-write', 158b0ddeba2SMarc-André Lureau 'data': { 'device': 'str', 159b0ddeba2SMarc-André Lureau 'data': 'str', 160dbeee392SMarkus Armbruster '*format': 'DataFormat'} } 161dbeee392SMarkus Armbruster 162dbeee392SMarkus Armbruster## 163dbeee392SMarkus Armbruster# @ringbuf-read: 164dbeee392SMarkus Armbruster# 165dbeee392SMarkus Armbruster# Read from a ring buffer character device. 166dbeee392SMarkus Armbruster# 167dbeee392SMarkus Armbruster# @device: the ring buffer character device name 168dbeee392SMarkus Armbruster# 169dbeee392SMarkus Armbruster# @size: how many bytes to read at most 170dbeee392SMarkus Armbruster# 171dbeee392SMarkus Armbruster# @format: data encoding (default 'utf8'). 172100cc4feSPeter Maydell# 173dbeee392SMarkus Armbruster# - base64: the data read is returned in base64 encoding. 174dbeee392SMarkus Armbruster# - utf8: the data read is interpreted as UTF-8. 175dbeee392SMarkus Armbruster# Bug: can screw up when the buffer contains invalid UTF-8 176dbeee392SMarkus Armbruster# sequences, NUL characters, after the ring buffer lost 177dbeee392SMarkus Armbruster# data, and when reading stops because the size limit is 178dbeee392SMarkus Armbruster# reached. 179dbeee392SMarkus Armbruster# - The return value is always Unicode regardless of format, 180dbeee392SMarkus Armbruster# like any other string. 181dbeee392SMarkus Armbruster# 182dbeee392SMarkus Armbruster# Returns: data read from the device 183dbeee392SMarkus Armbruster# 184dbeee392SMarkus Armbruster# Since: 1.4 185dbeee392SMarkus Armbruster# 186dbeee392SMarkus Armbruster# Example: 187dbeee392SMarkus Armbruster# 188dbeee392SMarkus Armbruster# -> { "execute": "ringbuf-read", 189dbeee392SMarkus Armbruster# "arguments": { "device": "foo", 190dbeee392SMarkus Armbruster# "size": 1000, 191dbeee392SMarkus Armbruster# "format": "utf8" } } 192dbeee392SMarkus Armbruster# <- { "return": "abcdefgh" } 193dbeee392SMarkus Armbruster# 194dbeee392SMarkus Armbruster## 195dbeee392SMarkus Armbruster{ 'command': 'ringbuf-read', 196dbeee392SMarkus Armbruster 'data': {'device': 'str', 'size': 'int', '*format': 'DataFormat'}, 197dbeee392SMarkus Armbruster 'returns': 'str' } 198dbeee392SMarkus Armbruster 199dbeee392SMarkus Armbruster## 200dbeee392SMarkus Armbruster# @ChardevCommon: 201dbeee392SMarkus Armbruster# 202dbeee392SMarkus Armbruster# Configuration shared across all chardev backends 203dbeee392SMarkus Armbruster# 204dbeee392SMarkus Armbruster# @logfile: The name of a logfile to save output 205dbeee392SMarkus Armbruster# @logappend: true to append instead of truncate 206dbeee392SMarkus Armbruster# (default to false to truncate) 207dbeee392SMarkus Armbruster# 208dbeee392SMarkus Armbruster# Since: 2.6 209dbeee392SMarkus Armbruster## 210b0ddeba2SMarc-André Lureau{ 'struct': 'ChardevCommon', 211b0ddeba2SMarc-André Lureau 'data': { '*logfile': 'str', 212dbeee392SMarkus Armbruster '*logappend': 'bool' } } 213dbeee392SMarkus Armbruster 214dbeee392SMarkus Armbruster## 215dbeee392SMarkus Armbruster# @ChardevFile: 216dbeee392SMarkus Armbruster# 217dbeee392SMarkus Armbruster# Configuration info for file chardevs. 218dbeee392SMarkus Armbruster# 219dbeee392SMarkus Armbruster# @in: The name of the input file 220dbeee392SMarkus Armbruster# @out: The name of the output file 221dbeee392SMarkus Armbruster# @append: Open the file in append mode (default false to 222dbeee392SMarkus Armbruster# truncate) (Since 2.6) 223dbeee392SMarkus Armbruster# 224dbeee392SMarkus Armbruster# Since: 1.4 225dbeee392SMarkus Armbruster## 226b0ddeba2SMarc-André Lureau{ 'struct': 'ChardevFile', 227b0ddeba2SMarc-André Lureau 'data': { '*in': 'str', 228dbeee392SMarkus Armbruster 'out': 'str', 229dbeee392SMarkus Armbruster '*append': 'bool' }, 230dbeee392SMarkus Armbruster 'base': 'ChardevCommon' } 231dbeee392SMarkus Armbruster 232dbeee392SMarkus Armbruster## 233dbeee392SMarkus Armbruster# @ChardevHostdev: 234dbeee392SMarkus Armbruster# 235dbeee392SMarkus Armbruster# Configuration info for device and pipe chardevs. 236dbeee392SMarkus Armbruster# 237dbeee392SMarkus Armbruster# @device: The name of the special file for the device, 238dbeee392SMarkus Armbruster# i.e. /dev/ttyS0 on Unix or COM1: on Windows 239dbeee392SMarkus Armbruster# 240dbeee392SMarkus Armbruster# Since: 1.4 241dbeee392SMarkus Armbruster## 242b0ddeba2SMarc-André Lureau{ 'struct': 'ChardevHostdev', 243b0ddeba2SMarc-André Lureau 'data': { 'device': 'str' }, 244dbeee392SMarkus Armbruster 'base': 'ChardevCommon' } 245dbeee392SMarkus Armbruster 246dbeee392SMarkus Armbruster## 247dbeee392SMarkus Armbruster# @ChardevSocket: 248dbeee392SMarkus Armbruster# 249dbeee392SMarkus Armbruster# Configuration info for (stream) socket chardevs. 250dbeee392SMarkus Armbruster# 251dbeee392SMarkus Armbruster# @addr: socket address to listen on (server=true) 252dbeee392SMarkus Armbruster# or connect to (server=false) 253dbeee392SMarkus Armbruster# @tls-creds: the ID of the TLS credentials object (since 2.6) 254fd4a5fd4SDaniel P. Berrange# @tls-authz: the ID of the QAuthZ authorization object against which 255fd4a5fd4SDaniel P. Berrange# the client's x509 distinguished name will be validated. This 256fd4a5fd4SDaniel P. Berrange# object is only resolved at time of use, so can be deleted 257fd4a5fd4SDaniel P. Berrange# and recreated on the fly while the chardev server is active. 258fd4a5fd4SDaniel P. Berrange# If missing, it will default to denying access (since 4.0) 259dbeee392SMarkus Armbruster# @server: create server socket (default: true) 260dbeee392SMarkus Armbruster# @wait: wait for incoming connection on server 261dbeee392SMarkus Armbruster# sockets (default: false). 2620f365e33SMarkus Armbruster# Silently ignored with server: false. This use is deprecated. 263dbeee392SMarkus Armbruster# @nodelay: set TCP_NODELAY socket option (default: false) 264dbeee392SMarkus Armbruster# @telnet: enable telnet protocol on server 265dbeee392SMarkus Armbruster# sockets (default: false) 266dbeee392SMarkus Armbruster# @tn3270: enable tn3270 protocol on server 267dbeee392SMarkus Armbruster# sockets (default: false) (Since: 2.10) 268981b06e7SJulia Suvorova# @websocket: enable websocket protocol on server 269981b06e7SJulia Suvorova# sockets (default: false) (Since: 3.1) 270dbeee392SMarkus Armbruster# @reconnect: For a client socket, if a socket is disconnected, 271dbeee392SMarkus Armbruster# then attempt a reconnect after the given number of seconds. 272dbeee392SMarkus Armbruster# Setting this to zero disables this function. (default: 0) 273dbeee392SMarkus Armbruster# (Since: 2.2) 274dbeee392SMarkus Armbruster# 275dbeee392SMarkus Armbruster# Since: 1.4 276dbeee392SMarkus Armbruster## 277b0ddeba2SMarc-André Lureau{ 'struct': 'ChardevSocket', 278b0ddeba2SMarc-André Lureau 'data': { 'addr': 'SocketAddressLegacy', 279dbeee392SMarkus Armbruster '*tls-creds': 'str', 280fd4a5fd4SDaniel P. Berrange '*tls-authz' : 'str', 281dbeee392SMarkus Armbruster '*server': 'bool', 282dbeee392SMarkus Armbruster '*wait': 'bool', 283dbeee392SMarkus Armbruster '*nodelay': 'bool', 284dbeee392SMarkus Armbruster '*telnet': 'bool', 285dbeee392SMarkus Armbruster '*tn3270': 'bool', 286981b06e7SJulia Suvorova '*websocket': 'bool', 287dbeee392SMarkus Armbruster '*reconnect': 'int' }, 288dbeee392SMarkus Armbruster 'base': 'ChardevCommon' } 289dbeee392SMarkus Armbruster 290dbeee392SMarkus Armbruster## 291dbeee392SMarkus Armbruster# @ChardevUdp: 292dbeee392SMarkus Armbruster# 293dbeee392SMarkus Armbruster# Configuration info for datagram socket chardevs. 294dbeee392SMarkus Armbruster# 295dbeee392SMarkus Armbruster# @remote: remote address 296dbeee392SMarkus Armbruster# @local: local address 297dbeee392SMarkus Armbruster# 298dbeee392SMarkus Armbruster# Since: 1.5 299dbeee392SMarkus Armbruster## 300b0ddeba2SMarc-André Lureau{ 'struct': 'ChardevUdp', 301b0ddeba2SMarc-André Lureau 'data': { 'remote': 'SocketAddressLegacy', 302dbeee392SMarkus Armbruster '*local': 'SocketAddressLegacy' }, 303dbeee392SMarkus Armbruster 'base': 'ChardevCommon' } 304dbeee392SMarkus Armbruster 305dbeee392SMarkus Armbruster## 306dbeee392SMarkus Armbruster# @ChardevMux: 307dbeee392SMarkus Armbruster# 308dbeee392SMarkus Armbruster# Configuration info for mux chardevs. 309dbeee392SMarkus Armbruster# 310dbeee392SMarkus Armbruster# @chardev: name of the base chardev. 311dbeee392SMarkus Armbruster# 312dbeee392SMarkus Armbruster# Since: 1.5 313dbeee392SMarkus Armbruster## 314b0ddeba2SMarc-André Lureau{ 'struct': 'ChardevMux', 315b0ddeba2SMarc-André Lureau 'data': { 'chardev': 'str' }, 316dbeee392SMarkus Armbruster 'base': 'ChardevCommon' } 317dbeee392SMarkus Armbruster 318dbeee392SMarkus Armbruster## 319dbeee392SMarkus Armbruster# @ChardevStdio: 320dbeee392SMarkus Armbruster# 321dbeee392SMarkus Armbruster# Configuration info for stdio chardevs. 322dbeee392SMarkus Armbruster# 323dbeee392SMarkus Armbruster# @signal: Allow signals (such as SIGINT triggered by ^C) 3246deb20f6SKevin Wolf# be delivered to qemu. Default: true. 325dbeee392SMarkus Armbruster# 326dbeee392SMarkus Armbruster# Since: 1.5 327dbeee392SMarkus Armbruster## 328b0ddeba2SMarc-André Lureau{ 'struct': 'ChardevStdio', 329b0ddeba2SMarc-André Lureau 'data': { '*signal': 'bool' }, 330dbeee392SMarkus Armbruster 'base': 'ChardevCommon' } 331dbeee392SMarkus Armbruster 332dbeee392SMarkus Armbruster 333dbeee392SMarkus Armbruster## 334dbeee392SMarkus Armbruster# @ChardevSpiceChannel: 335dbeee392SMarkus Armbruster# 336dbeee392SMarkus Armbruster# Configuration info for spice vm channel chardevs. 337dbeee392SMarkus Armbruster# 338dbeee392SMarkus Armbruster# @type: kind of channel (for example vdagent). 339dbeee392SMarkus Armbruster# 340dbeee392SMarkus Armbruster# Since: 1.5 341dbeee392SMarkus Armbruster## 342b0ddeba2SMarc-André Lureau{ 'struct': 'ChardevSpiceChannel', 343b0ddeba2SMarc-André Lureau 'data': { 'type': 'str' }, 344fd9dda3bSMarc-André Lureau 'base': 'ChardevCommon', 3458a9f1e1dSMarc-André Lureau 'if': 'CONFIG_SPICE' } 346dbeee392SMarkus Armbruster 347dbeee392SMarkus Armbruster## 348dbeee392SMarkus Armbruster# @ChardevSpicePort: 349dbeee392SMarkus Armbruster# 350dbeee392SMarkus Armbruster# Configuration info for spice port chardevs. 351dbeee392SMarkus Armbruster# 352dbeee392SMarkus Armbruster# @fqdn: name of the channel (see docs/spice-port-fqdn.txt) 353dbeee392SMarkus Armbruster# 354dbeee392SMarkus Armbruster# Since: 1.5 355dbeee392SMarkus Armbruster## 356b0ddeba2SMarc-André Lureau{ 'struct': 'ChardevSpicePort', 357b0ddeba2SMarc-André Lureau 'data': { 'fqdn': 'str' }, 358fd9dda3bSMarc-André Lureau 'base': 'ChardevCommon', 3598a9f1e1dSMarc-André Lureau 'if': 'CONFIG_SPICE' } 360dbeee392SMarkus Armbruster 361dbeee392SMarkus Armbruster## 362dbeee392SMarkus Armbruster# @ChardevVC: 363dbeee392SMarkus Armbruster# 364dbeee392SMarkus Armbruster# Configuration info for virtual console chardevs. 365dbeee392SMarkus Armbruster# 366dbeee392SMarkus Armbruster# @width: console width, in pixels 367dbeee392SMarkus Armbruster# @height: console height, in pixels 368dbeee392SMarkus Armbruster# @cols: console width, in chars 369dbeee392SMarkus Armbruster# @rows: console height, in chars 370dbeee392SMarkus Armbruster# 371dbeee392SMarkus Armbruster# Since: 1.5 372dbeee392SMarkus Armbruster## 373b0ddeba2SMarc-André Lureau{ 'struct': 'ChardevVC', 374b0ddeba2SMarc-André Lureau 'data': { '*width': 'int', 375dbeee392SMarkus Armbruster '*height': 'int', 376dbeee392SMarkus Armbruster '*cols': 'int', 377dbeee392SMarkus Armbruster '*rows': 'int' }, 378dbeee392SMarkus Armbruster 'base': 'ChardevCommon' } 379dbeee392SMarkus Armbruster 380dbeee392SMarkus Armbruster## 381dbeee392SMarkus Armbruster# @ChardevRingbuf: 382dbeee392SMarkus Armbruster# 383dbeee392SMarkus Armbruster# Configuration info for ring buffer chardevs. 384dbeee392SMarkus Armbruster# 385dbeee392SMarkus Armbruster# @size: ring buffer size, must be power of two, default is 65536 386dbeee392SMarkus Armbruster# 387dbeee392SMarkus Armbruster# Since: 1.5 388dbeee392SMarkus Armbruster## 389b0ddeba2SMarc-André Lureau{ 'struct': 'ChardevRingbuf', 390b0ddeba2SMarc-André Lureau 'data': { '*size': 'int' }, 391dbeee392SMarkus Armbruster 'base': 'ChardevCommon' } 392dbeee392SMarkus Armbruster 393dbeee392SMarkus Armbruster## 394de74a22cSGerd Hoffmann# @ChardevQemuVDAgent: 395de74a22cSGerd Hoffmann# 396de74a22cSGerd Hoffmann# Configuration info for qemu vdagent implementation. 397de74a22cSGerd Hoffmann# 39856081919SGerd Hoffmann# @mouse: enable/disable mouse, default is enabled. 399f0349f4dSGerd Hoffmann# @clipboard: enable/disable clipboard, default is disabled. 40056081919SGerd Hoffmann# 401de74a22cSGerd Hoffmann# Since: 6.1 402de74a22cSGerd Hoffmann# 403de74a22cSGerd Hoffmann## 404de74a22cSGerd Hoffmann{ 'struct': 'ChardevQemuVDAgent', 405f0349f4dSGerd Hoffmann 'data': { '*mouse': 'bool', 406f0349f4dSGerd Hoffmann '*clipboard': 'bool' }, 407de74a22cSGerd Hoffmann 'base': 'ChardevCommon', 4088a9f1e1dSMarc-André Lureau 'if': 'CONFIG_SPICE_PROTOCOL' } 409de74a22cSGerd Hoffmann 410de74a22cSGerd Hoffmann## 411*3218c0e9SMarkus Armbruster# @ChardevBackendKind: 412*3218c0e9SMarkus Armbruster# 413*3218c0e9SMarkus Armbruster# @pipe: Since 1.5 414*3218c0e9SMarkus Armbruster# @udp: Since 1.5 415*3218c0e9SMarkus Armbruster# @mux: Since 1.5 416*3218c0e9SMarkus Armbruster# @msmouse: Since 1.5 417*3218c0e9SMarkus Armbruster# @wctablet: Since 2.9 418*3218c0e9SMarkus Armbruster# @braille: Since 1.5 419*3218c0e9SMarkus Armbruster# @testdev: Since 2.2 420*3218c0e9SMarkus Armbruster# @stdio: Since 1.5 421*3218c0e9SMarkus Armbruster# @console: Since 1.5 422*3218c0e9SMarkus Armbruster# @spicevmc: Since 1.5 423*3218c0e9SMarkus Armbruster# @spiceport: Since 1.5 424*3218c0e9SMarkus Armbruster# @qemu-vdagent: Since 6.1 425*3218c0e9SMarkus Armbruster# @vc: v1.5 426*3218c0e9SMarkus Armbruster# @ringbuf: Since 1.6 427*3218c0e9SMarkus Armbruster# @memory: Since 1.5 428*3218c0e9SMarkus Armbruster# 429*3218c0e9SMarkus Armbruster# Since: 1.4 430*3218c0e9SMarkus Armbruster## 431*3218c0e9SMarkus Armbruster{ 'enum': 'ChardevBackendKind', 432*3218c0e9SMarkus Armbruster 'data': [ 'file', 433*3218c0e9SMarkus Armbruster 'serial', 434*3218c0e9SMarkus Armbruster 'parallel', 435*3218c0e9SMarkus Armbruster 'pipe', 436*3218c0e9SMarkus Armbruster 'socket', 437*3218c0e9SMarkus Armbruster 'udp', 438*3218c0e9SMarkus Armbruster 'pty', 439*3218c0e9SMarkus Armbruster 'null', 440*3218c0e9SMarkus Armbruster 'mux', 441*3218c0e9SMarkus Armbruster 'msmouse', 442*3218c0e9SMarkus Armbruster 'wctablet', 443*3218c0e9SMarkus Armbruster 'braille', 444*3218c0e9SMarkus Armbruster 'testdev', 445*3218c0e9SMarkus Armbruster 'stdio', 446*3218c0e9SMarkus Armbruster 'console', 447*3218c0e9SMarkus Armbruster { 'name': 'spicevmc', 'if': 'CONFIG_SPICE' }, 448*3218c0e9SMarkus Armbruster { 'name': 'spiceport', 'if': 'CONFIG_SPICE' }, 449*3218c0e9SMarkus Armbruster { 'name': 'qemu-vdagent', 'if': 'CONFIG_SPICE_PROTOCOL' }, 450*3218c0e9SMarkus Armbruster 'vc', 451*3218c0e9SMarkus Armbruster 'ringbuf', 452*3218c0e9SMarkus Armbruster # next one is just for compatibility 453*3218c0e9SMarkus Armbruster 'memory' ] } 454*3218c0e9SMarkus Armbruster 455*3218c0e9SMarkus Armbruster## 456*3218c0e9SMarkus Armbruster# @ChardevFileWrapper: 457*3218c0e9SMarkus Armbruster# 458*3218c0e9SMarkus Armbruster# Since: 1.4 459*3218c0e9SMarkus Armbruster## 460*3218c0e9SMarkus Armbruster{ 'struct': 'ChardevFileWrapper', 461*3218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevFile' } } 462*3218c0e9SMarkus Armbruster 463*3218c0e9SMarkus Armbruster## 464*3218c0e9SMarkus Armbruster# @ChardevHostdevWrapper: 465*3218c0e9SMarkus Armbruster# 466*3218c0e9SMarkus Armbruster# Since: 1.4 467*3218c0e9SMarkus Armbruster## 468*3218c0e9SMarkus Armbruster{ 'struct': 'ChardevHostdevWrapper', 469*3218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevHostdev' } } 470*3218c0e9SMarkus Armbruster 471*3218c0e9SMarkus Armbruster## 472*3218c0e9SMarkus Armbruster# @ChardevSocketWrapper: 473*3218c0e9SMarkus Armbruster# 474*3218c0e9SMarkus Armbruster# Since: 1.4 475*3218c0e9SMarkus Armbruster## 476*3218c0e9SMarkus Armbruster{ 'struct': 'ChardevSocketWrapper', 477*3218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevSocket' } } 478*3218c0e9SMarkus Armbruster 479*3218c0e9SMarkus Armbruster## 480*3218c0e9SMarkus Armbruster# @ChardevUdpWrapper: 481*3218c0e9SMarkus Armbruster# 482*3218c0e9SMarkus Armbruster# Since: 1.5 483*3218c0e9SMarkus Armbruster## 484*3218c0e9SMarkus Armbruster{ 'struct': 'ChardevUdpWrapper', 485*3218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevUdp' } } 486*3218c0e9SMarkus Armbruster 487*3218c0e9SMarkus Armbruster## 488*3218c0e9SMarkus Armbruster# @ChardevCommonWrapper: 489*3218c0e9SMarkus Armbruster# 490*3218c0e9SMarkus Armbruster# Since: 2.6 491*3218c0e9SMarkus Armbruster## 492*3218c0e9SMarkus Armbruster{ 'struct': 'ChardevCommonWrapper', 493*3218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevCommon' } } 494*3218c0e9SMarkus Armbruster 495*3218c0e9SMarkus Armbruster## 496*3218c0e9SMarkus Armbruster# @ChardevMuxWrapper: 497*3218c0e9SMarkus Armbruster# 498*3218c0e9SMarkus Armbruster# Since: 1.5 499*3218c0e9SMarkus Armbruster## 500*3218c0e9SMarkus Armbruster{ 'struct': 'ChardevMuxWrapper', 501*3218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevMux' } } 502*3218c0e9SMarkus Armbruster 503*3218c0e9SMarkus Armbruster## 504*3218c0e9SMarkus Armbruster# @ChardevStdioWrapper: 505*3218c0e9SMarkus Armbruster# 506*3218c0e9SMarkus Armbruster# Since: 1.5 507*3218c0e9SMarkus Armbruster## 508*3218c0e9SMarkus Armbruster{ 'struct': 'ChardevStdioWrapper', 509*3218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevStdio' } } 510*3218c0e9SMarkus Armbruster 511*3218c0e9SMarkus Armbruster## 512*3218c0e9SMarkus Armbruster# @ChardevSpiceChannelWrapper: 513*3218c0e9SMarkus Armbruster# 514*3218c0e9SMarkus Armbruster# Since: 1.5 515*3218c0e9SMarkus Armbruster## 516*3218c0e9SMarkus Armbruster{ 'struct': 'ChardevSpiceChannelWrapper', 517*3218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevSpiceChannel' }, 518*3218c0e9SMarkus Armbruster 'if': 'CONFIG_SPICE' } 519*3218c0e9SMarkus Armbruster 520*3218c0e9SMarkus Armbruster## 521*3218c0e9SMarkus Armbruster# @ChardevSpicePortWrapper: 522*3218c0e9SMarkus Armbruster# 523*3218c0e9SMarkus Armbruster# Since: 1.5 524*3218c0e9SMarkus Armbruster## 525*3218c0e9SMarkus Armbruster{ 'struct': 'ChardevSpicePortWrapper', 526*3218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevSpicePort' }, 527*3218c0e9SMarkus Armbruster 'if': 'CONFIG_SPICE' } 528*3218c0e9SMarkus Armbruster 529*3218c0e9SMarkus Armbruster## 530*3218c0e9SMarkus Armbruster# @ChardevQemuVDAgentWrapper: 531*3218c0e9SMarkus Armbruster# 532*3218c0e9SMarkus Armbruster# Since: 6.1 533*3218c0e9SMarkus Armbruster## 534*3218c0e9SMarkus Armbruster{ 'struct': 'ChardevQemuVDAgentWrapper', 535*3218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevQemuVDAgent' }, 536*3218c0e9SMarkus Armbruster 'if': 'CONFIG_SPICE_PROTOCOL' } 537*3218c0e9SMarkus Armbruster 538*3218c0e9SMarkus Armbruster## 539*3218c0e9SMarkus Armbruster# @ChardevVCWrapper: 540*3218c0e9SMarkus Armbruster# 541*3218c0e9SMarkus Armbruster# Since: 1.5 542*3218c0e9SMarkus Armbruster## 543*3218c0e9SMarkus Armbruster{ 'struct': 'ChardevVCWrapper', 544*3218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevVC' } } 545*3218c0e9SMarkus Armbruster 546*3218c0e9SMarkus Armbruster## 547*3218c0e9SMarkus Armbruster# @ChardevRingbufWrapper: 548*3218c0e9SMarkus Armbruster# 549*3218c0e9SMarkus Armbruster# Since: 1.5 550*3218c0e9SMarkus Armbruster## 551*3218c0e9SMarkus Armbruster{ 'struct': 'ChardevRingbufWrapper', 552*3218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevRingbuf' } } 553*3218c0e9SMarkus Armbruster 554*3218c0e9SMarkus Armbruster## 555dbeee392SMarkus Armbruster# @ChardevBackend: 556dbeee392SMarkus Armbruster# 557dbeee392SMarkus Armbruster# Configuration info for the new chardev backend. 558dbeee392SMarkus Armbruster# 559*3218c0e9SMarkus Armbruster# Since: 1.4 560dbeee392SMarkus Armbruster## 561b0ddeba2SMarc-André Lureau{ 'union': 'ChardevBackend', 562*3218c0e9SMarkus Armbruster 'base': { 'type': 'ChardevBackendKind' }, 563*3218c0e9SMarkus Armbruster 'discriminator': 'type', 564*3218c0e9SMarkus Armbruster 'data': { 'file': 'ChardevFileWrapper', 565*3218c0e9SMarkus Armbruster 'serial': 'ChardevHostdevWrapper', 566*3218c0e9SMarkus Armbruster 'parallel': 'ChardevHostdevWrapper', 567*3218c0e9SMarkus Armbruster 'pipe': 'ChardevHostdevWrapper', 568*3218c0e9SMarkus Armbruster 'socket': 'ChardevSocketWrapper', 569*3218c0e9SMarkus Armbruster 'udp': 'ChardevUdpWrapper', 570*3218c0e9SMarkus Armbruster 'pty': 'ChardevCommonWrapper', 571*3218c0e9SMarkus Armbruster 'null': 'ChardevCommonWrapper', 572*3218c0e9SMarkus Armbruster 'mux': 'ChardevMuxWrapper', 573*3218c0e9SMarkus Armbruster 'msmouse': 'ChardevCommonWrapper', 574*3218c0e9SMarkus Armbruster 'wctablet': 'ChardevCommonWrapper', 575*3218c0e9SMarkus Armbruster 'braille': 'ChardevCommonWrapper', 576*3218c0e9SMarkus Armbruster 'testdev': 'ChardevCommonWrapper', 577*3218c0e9SMarkus Armbruster 'stdio': 'ChardevStdioWrapper', 578*3218c0e9SMarkus Armbruster 'console': 'ChardevCommonWrapper', 579*3218c0e9SMarkus Armbruster 'spicevmc': { 'type': 'ChardevSpiceChannelWrapper', 5808a9f1e1dSMarc-André Lureau 'if': 'CONFIG_SPICE' }, 581*3218c0e9SMarkus Armbruster 'spiceport': { 'type': 'ChardevSpicePortWrapper', 5828a9f1e1dSMarc-André Lureau 'if': 'CONFIG_SPICE' }, 583*3218c0e9SMarkus Armbruster 'qemu-vdagent': { 'type': 'ChardevQemuVDAgentWrapper', 5848a9f1e1dSMarc-André Lureau 'if': 'CONFIG_SPICE_PROTOCOL' }, 585*3218c0e9SMarkus Armbruster 'vc': 'ChardevVCWrapper', 586*3218c0e9SMarkus Armbruster 'ringbuf': 'ChardevRingbufWrapper', 587dbeee392SMarkus Armbruster # next one is just for compatibility 588*3218c0e9SMarkus Armbruster 'memory': 'ChardevRingbufWrapper' } } 589dbeee392SMarkus Armbruster 590dbeee392SMarkus Armbruster## 591dbeee392SMarkus Armbruster# @ChardevReturn: 592dbeee392SMarkus Armbruster# 593dbeee392SMarkus Armbruster# Return info about the chardev backend just created. 594dbeee392SMarkus Armbruster# 595dbeee392SMarkus Armbruster# @pty: name of the slave pseudoterminal device, present if 596dbeee392SMarkus Armbruster# and only if a chardev of type 'pty' was created 597dbeee392SMarkus Armbruster# 598dbeee392SMarkus Armbruster# Since: 1.4 599dbeee392SMarkus Armbruster## 600b0ddeba2SMarc-André Lureau{ 'struct' : 'ChardevReturn', 601b0ddeba2SMarc-André Lureau 'data': { '*pty': 'str' } } 602dbeee392SMarkus Armbruster 603dbeee392SMarkus Armbruster## 604dbeee392SMarkus Armbruster# @chardev-add: 605dbeee392SMarkus Armbruster# 606dbeee392SMarkus Armbruster# Add a character device backend 607dbeee392SMarkus Armbruster# 608dbeee392SMarkus Armbruster# @id: the chardev's ID, must be unique 609dbeee392SMarkus Armbruster# @backend: backend type and parameters 610dbeee392SMarkus Armbruster# 611dbeee392SMarkus Armbruster# Returns: ChardevReturn. 612dbeee392SMarkus Armbruster# 613dbeee392SMarkus Armbruster# Since: 1.4 614dbeee392SMarkus Armbruster# 615dbeee392SMarkus Armbruster# Example: 616dbeee392SMarkus Armbruster# 617dbeee392SMarkus Armbruster# -> { "execute" : "chardev-add", 618dbeee392SMarkus Armbruster# "arguments" : { "id" : "foo", 619dbeee392SMarkus Armbruster# "backend" : { "type" : "null", "data" : {} } } } 620dbeee392SMarkus Armbruster# <- { "return": {} } 621dbeee392SMarkus Armbruster# 622dbeee392SMarkus Armbruster# -> { "execute" : "chardev-add", 623dbeee392SMarkus Armbruster# "arguments" : { "id" : "bar", 624dbeee392SMarkus Armbruster# "backend" : { "type" : "file", 625dbeee392SMarkus Armbruster# "data" : { "out" : "/tmp/bar.log" } } } } 626dbeee392SMarkus Armbruster# <- { "return": {} } 627dbeee392SMarkus Armbruster# 628dbeee392SMarkus Armbruster# -> { "execute" : "chardev-add", 629dbeee392SMarkus Armbruster# "arguments" : { "id" : "baz", 630dbeee392SMarkus Armbruster# "backend" : { "type" : "pty", "data" : {} } } } 631dbeee392SMarkus Armbruster# <- { "return": { "pty" : "/dev/pty/42" } } 632dbeee392SMarkus Armbruster# 633dbeee392SMarkus Armbruster## 634b0ddeba2SMarc-André Lureau{ 'command': 'chardev-add', 635b0ddeba2SMarc-André Lureau 'data': { 'id': 'str', 636dbeee392SMarkus Armbruster 'backend': 'ChardevBackend' }, 637dbeee392SMarkus Armbruster 'returns': 'ChardevReturn' } 638dbeee392SMarkus Armbruster 639dbeee392SMarkus Armbruster## 640dbeee392SMarkus Armbruster# @chardev-change: 641dbeee392SMarkus Armbruster# 642dbeee392SMarkus Armbruster# Change a character device backend 643dbeee392SMarkus Armbruster# 644dbeee392SMarkus Armbruster# @id: the chardev's ID, must exist 645dbeee392SMarkus Armbruster# @backend: new backend type and parameters 646dbeee392SMarkus Armbruster# 647dbeee392SMarkus Armbruster# Returns: ChardevReturn. 648dbeee392SMarkus Armbruster# 649dbeee392SMarkus Armbruster# Since: 2.10 650dbeee392SMarkus Armbruster# 651dbeee392SMarkus Armbruster# Example: 652dbeee392SMarkus Armbruster# 653dbeee392SMarkus Armbruster# -> { "execute" : "chardev-change", 654dbeee392SMarkus Armbruster# "arguments" : { "id" : "baz", 655dbeee392SMarkus Armbruster# "backend" : { "type" : "pty", "data" : {} } } } 656dbeee392SMarkus Armbruster# <- { "return": { "pty" : "/dev/pty/42" } } 657dbeee392SMarkus Armbruster# 658dbeee392SMarkus Armbruster# -> {"execute" : "chardev-change", 659dbeee392SMarkus Armbruster# "arguments" : { 660dbeee392SMarkus Armbruster# "id" : "charchannel2", 661dbeee392SMarkus Armbruster# "backend" : { 662dbeee392SMarkus Armbruster# "type" : "socket", 663dbeee392SMarkus Armbruster# "data" : { 664dbeee392SMarkus Armbruster# "addr" : { 665dbeee392SMarkus Armbruster# "type" : "unix" , 666dbeee392SMarkus Armbruster# "data" : { 667dbeee392SMarkus Armbruster# "path" : "/tmp/charchannel2.socket" 668dbeee392SMarkus Armbruster# } 669dbeee392SMarkus Armbruster# }, 670dbeee392SMarkus Armbruster# "server" : true, 671dbeee392SMarkus Armbruster# "wait" : false }}}} 672dbeee392SMarkus Armbruster# <- {"return": {}} 673dbeee392SMarkus Armbruster# 674dbeee392SMarkus Armbruster## 675b0ddeba2SMarc-André Lureau{ 'command': 'chardev-change', 676b0ddeba2SMarc-André Lureau 'data': { 'id': 'str', 677dbeee392SMarkus Armbruster 'backend': 'ChardevBackend' }, 678dbeee392SMarkus Armbruster 'returns': 'ChardevReturn' } 679dbeee392SMarkus Armbruster 680dbeee392SMarkus Armbruster## 681dbeee392SMarkus Armbruster# @chardev-remove: 682dbeee392SMarkus Armbruster# 683dbeee392SMarkus Armbruster# Remove a character device backend 684dbeee392SMarkus Armbruster# 685dbeee392SMarkus Armbruster# @id: the chardev's ID, must exist and not be in use 686dbeee392SMarkus Armbruster# 687dbeee392SMarkus Armbruster# Returns: Nothing on success 688dbeee392SMarkus Armbruster# 689dbeee392SMarkus Armbruster# Since: 1.4 690dbeee392SMarkus Armbruster# 691dbeee392SMarkus Armbruster# Example: 692dbeee392SMarkus Armbruster# 693dbeee392SMarkus Armbruster# -> { "execute": "chardev-remove", "arguments": { "id" : "foo" } } 694dbeee392SMarkus Armbruster# <- { "return": {} } 695dbeee392SMarkus Armbruster# 696dbeee392SMarkus Armbruster## 697b0ddeba2SMarc-André Lureau{ 'command': 'chardev-remove', 698b0ddeba2SMarc-André Lureau 'data': { 'id': 'str' } } 699dbeee392SMarkus Armbruster 700dbeee392SMarkus Armbruster## 701dbeee392SMarkus Armbruster# @chardev-send-break: 702dbeee392SMarkus Armbruster# 703dbeee392SMarkus Armbruster# Send a break to a character device 704dbeee392SMarkus Armbruster# 705dbeee392SMarkus Armbruster# @id: the chardev's ID, must exist 706dbeee392SMarkus Armbruster# 707dbeee392SMarkus Armbruster# Returns: Nothing on success 708dbeee392SMarkus Armbruster# 709dbeee392SMarkus Armbruster# Since: 2.10 710dbeee392SMarkus Armbruster# 711dbeee392SMarkus Armbruster# Example: 712dbeee392SMarkus Armbruster# 713dbeee392SMarkus Armbruster# -> { "execute": "chardev-send-break", "arguments": { "id" : "foo" } } 714dbeee392SMarkus Armbruster# <- { "return": {} } 715dbeee392SMarkus Armbruster# 716dbeee392SMarkus Armbruster## 717b0ddeba2SMarc-André Lureau{ 'command': 'chardev-send-break', 718b0ddeba2SMarc-André Lureau 'data': { 'id': 'str' } } 719dbeee392SMarkus Armbruster 720dbeee392SMarkus Armbruster## 721dbeee392SMarkus Armbruster# @VSERPORT_CHANGE: 722dbeee392SMarkus Armbruster# 723dbeee392SMarkus Armbruster# Emitted when the guest opens or closes a virtio-serial port. 724dbeee392SMarkus Armbruster# 725dbeee392SMarkus Armbruster# @id: device identifier of the virtio-serial port 726dbeee392SMarkus Armbruster# 727dbeee392SMarkus Armbruster# @open: true if the guest has opened the virtio-serial port 728dbeee392SMarkus Armbruster# 729382bd1cbSMarkus Armbruster# Note: This event is rate-limited. 730382bd1cbSMarkus Armbruster# 731dbeee392SMarkus Armbruster# Since: 2.1 732dbeee392SMarkus Armbruster# 733dbeee392SMarkus Armbruster# Example: 734dbeee392SMarkus Armbruster# 735dbeee392SMarkus Armbruster# <- { "event": "VSERPORT_CHANGE", 736dbeee392SMarkus Armbruster# "data": { "id": "channel0", "open": true }, 737dbeee392SMarkus Armbruster# "timestamp": { "seconds": 1401385907, "microseconds": 422329 } } 738dbeee392SMarkus Armbruster# 739dbeee392SMarkus Armbruster## 740dbeee392SMarkus Armbruster{ 'event': 'VSERPORT_CHANGE', 741b0ddeba2SMarc-André Lureau 'data': { 'id': 'str', 742b0ddeba2SMarc-André Lureau 'open': 'bool' } } 743