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# 20a937b6aaSMarkus Armbruster# @frontend-open: shows whether the frontend device attached to this 21ff62c210SMarkus Armbruster# backend (e.g. with the chardev=... option) is in open or closed 22a937b6aaSMarkus Armbruster# state (since 2.1) 23dbeee392SMarkus Armbruster# 24a937b6aaSMarkus Armbruster# Notes: @filename is encoded using the QEMU command line character 25a937b6aaSMarkus Armbruster# device 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## 66a87706c8SIgor Mammedov{ 'command': 'query-chardev', 'returns': ['ChardevInfo'], 67a87706c8SIgor Mammedov 'allow-preconfig': true } 68dbeee392SMarkus Armbruster 69dbeee392SMarkus Armbruster## 70dbeee392SMarkus Armbruster# @ChardevBackendInfo: 71dbeee392SMarkus Armbruster# 72dbeee392SMarkus Armbruster# Information about a character device backend 73dbeee392SMarkus Armbruster# 74dbeee392SMarkus Armbruster# @name: The backend name 75dbeee392SMarkus Armbruster# 76dbeee392SMarkus Armbruster# Since: 2.0 77dbeee392SMarkus Armbruster## 78dbeee392SMarkus Armbruster{ 'struct': 'ChardevBackendInfo', 'data': {'name': 'str'} } 79dbeee392SMarkus Armbruster 80dbeee392SMarkus Armbruster## 81dbeee392SMarkus Armbruster# @query-chardev-backends: 82dbeee392SMarkus Armbruster# 83dbeee392SMarkus Armbruster# Returns information about character device backends. 84dbeee392SMarkus Armbruster# 85dbeee392SMarkus Armbruster# Returns: a list of @ChardevBackendInfo 86dbeee392SMarkus Armbruster# 87dbeee392SMarkus Armbruster# Since: 2.0 88dbeee392SMarkus Armbruster# 89dbeee392SMarkus Armbruster# Example: 90dbeee392SMarkus Armbruster# 91dbeee392SMarkus Armbruster# -> { "execute": "query-chardev-backends" } 92dbeee392SMarkus Armbruster# <- { 93dbeee392SMarkus Armbruster# "return":[ 94dbeee392SMarkus Armbruster# { 95dbeee392SMarkus Armbruster# "name":"udp" 96dbeee392SMarkus Armbruster# }, 97dbeee392SMarkus Armbruster# { 98dbeee392SMarkus Armbruster# "name":"tcp" 99dbeee392SMarkus Armbruster# }, 100dbeee392SMarkus Armbruster# { 101dbeee392SMarkus Armbruster# "name":"unix" 102dbeee392SMarkus Armbruster# }, 103dbeee392SMarkus Armbruster# { 104dbeee392SMarkus Armbruster# "name":"spiceport" 105dbeee392SMarkus Armbruster# } 106dbeee392SMarkus Armbruster# ] 107dbeee392SMarkus Armbruster# } 108dbeee392SMarkus Armbruster## 109dbeee392SMarkus Armbruster{ 'command': 'query-chardev-backends', 'returns': ['ChardevBackendInfo'] } 110dbeee392SMarkus Armbruster 111dbeee392SMarkus Armbruster## 112dbeee392SMarkus Armbruster# @DataFormat: 113dbeee392SMarkus Armbruster# 114dbeee392SMarkus Armbruster# An enumeration of data format. 115dbeee392SMarkus Armbruster# 116dbeee392SMarkus Armbruster# @utf8: Data is a UTF-8 string (RFC 3629) 117dbeee392SMarkus Armbruster# 118dbeee392SMarkus Armbruster# @base64: Data is Base64 encoded binary (RFC 3548) 119dbeee392SMarkus Armbruster# 120dbeee392SMarkus Armbruster# Since: 1.4 121dbeee392SMarkus Armbruster## 122dbeee392SMarkus Armbruster{ 'enum': 'DataFormat', 123dbeee392SMarkus Armbruster 'data': [ 'utf8', 'base64' ] } 124dbeee392SMarkus Armbruster 125dbeee392SMarkus Armbruster## 126dbeee392SMarkus Armbruster# @ringbuf-write: 127dbeee392SMarkus Armbruster# 128dbeee392SMarkus Armbruster# Write to a ring buffer character device. 129dbeee392SMarkus Armbruster# 130dbeee392SMarkus Armbruster# @device: the ring buffer character device name 131dbeee392SMarkus Armbruster# 132dbeee392SMarkus Armbruster# @data: data to write 133dbeee392SMarkus Armbruster# 134dbeee392SMarkus Armbruster# @format: data encoding (default 'utf8'). 135100cc4feSPeter Maydell# 136a937b6aaSMarkus Armbruster# - base64: data must be base64 encoded text. Its binary decoding 137a937b6aaSMarkus Armbruster# gets written. 138dbeee392SMarkus Armbruster# - utf8: data's UTF-8 encoding is written 139a937b6aaSMarkus Armbruster# - data itself is always Unicode regardless of format, like any 140a937b6aaSMarkus Armbruster# other string. 141dbeee392SMarkus Armbruster# 142dbeee392SMarkus Armbruster# Returns: Nothing on success 143dbeee392SMarkus Armbruster# 144dbeee392SMarkus Armbruster# Since: 1.4 145dbeee392SMarkus Armbruster# 146dbeee392SMarkus Armbruster# Example: 147dbeee392SMarkus Armbruster# 148dbeee392SMarkus Armbruster# -> { "execute": "ringbuf-write", 149dbeee392SMarkus Armbruster# "arguments": { "device": "foo", 150dbeee392SMarkus Armbruster# "data": "abcdefgh", 151dbeee392SMarkus Armbruster# "format": "utf8" } } 152dbeee392SMarkus Armbruster# <- { "return": {} } 153dbeee392SMarkus Armbruster## 154dbeee392SMarkus Armbruster{ 'command': 'ringbuf-write', 155b0ddeba2SMarc-André Lureau 'data': { 'device': 'str', 156b0ddeba2SMarc-André Lureau 'data': 'str', 157dbeee392SMarkus Armbruster '*format': 'DataFormat'} } 158dbeee392SMarkus Armbruster 159dbeee392SMarkus Armbruster## 160dbeee392SMarkus Armbruster# @ringbuf-read: 161dbeee392SMarkus Armbruster# 162dbeee392SMarkus Armbruster# Read from a ring buffer character device. 163dbeee392SMarkus Armbruster# 164dbeee392SMarkus Armbruster# @device: the ring buffer character device name 165dbeee392SMarkus Armbruster# 166dbeee392SMarkus Armbruster# @size: how many bytes to read at most 167dbeee392SMarkus Armbruster# 168dbeee392SMarkus Armbruster# @format: data encoding (default 'utf8'). 169100cc4feSPeter Maydell# 170dbeee392SMarkus Armbruster# - base64: the data read is returned in base64 encoding. 171dbeee392SMarkus Armbruster# - utf8: the data read is interpreted as UTF-8. 172dbeee392SMarkus Armbruster# Bug: can screw up when the buffer contains invalid UTF-8 173a937b6aaSMarkus Armbruster# sequences, NUL characters, after the ring buffer lost data, 174a937b6aaSMarkus Armbruster# and when reading stops because the size limit is reached. 175a937b6aaSMarkus Armbruster# - The return value is always Unicode regardless of format, like 176a937b6aaSMarkus Armbruster# any other string. 177dbeee392SMarkus Armbruster# 178dbeee392SMarkus Armbruster# Returns: data read from the device 179dbeee392SMarkus Armbruster# 180dbeee392SMarkus Armbruster# Since: 1.4 181dbeee392SMarkus Armbruster# 182dbeee392SMarkus Armbruster# Example: 183dbeee392SMarkus Armbruster# 184dbeee392SMarkus Armbruster# -> { "execute": "ringbuf-read", 185dbeee392SMarkus Armbruster# "arguments": { "device": "foo", 186dbeee392SMarkus Armbruster# "size": 1000, 187dbeee392SMarkus Armbruster# "format": "utf8" } } 188dbeee392SMarkus Armbruster# <- { "return": "abcdefgh" } 189dbeee392SMarkus Armbruster## 190dbeee392SMarkus Armbruster{ 'command': 'ringbuf-read', 191dbeee392SMarkus Armbruster 'data': {'device': 'str', 'size': 'int', '*format': 'DataFormat'}, 192dbeee392SMarkus Armbruster 'returns': 'str' } 193dbeee392SMarkus Armbruster 194dbeee392SMarkus Armbruster## 195dbeee392SMarkus Armbruster# @ChardevCommon: 196dbeee392SMarkus Armbruster# 197dbeee392SMarkus Armbruster# Configuration shared across all chardev backends 198dbeee392SMarkus Armbruster# 199dbeee392SMarkus Armbruster# @logfile: The name of a logfile to save output 200a937b6aaSMarkus Armbruster# 201a937b6aaSMarkus Armbruster# @logappend: true to append instead of truncate (default to false to 202a937b6aaSMarkus Armbruster# truncate) 203dbeee392SMarkus Armbruster# 204dbeee392SMarkus Armbruster# Since: 2.6 205dbeee392SMarkus Armbruster## 206b0ddeba2SMarc-André Lureau{ 'struct': 'ChardevCommon', 207b0ddeba2SMarc-André Lureau 'data': { '*logfile': 'str', 208dbeee392SMarkus Armbruster '*logappend': 'bool' } } 209dbeee392SMarkus Armbruster 210dbeee392SMarkus Armbruster## 211dbeee392SMarkus Armbruster# @ChardevFile: 212dbeee392SMarkus Armbruster# 213dbeee392SMarkus Armbruster# Configuration info for file chardevs. 214dbeee392SMarkus Armbruster# 215dbeee392SMarkus Armbruster# @in: The name of the input file 216a937b6aaSMarkus Armbruster# 217dbeee392SMarkus Armbruster# @out: The name of the output file 218a937b6aaSMarkus Armbruster# 219a937b6aaSMarkus Armbruster# @append: Open the file in append mode (default false to truncate) 220a937b6aaSMarkus Armbruster# (Since 2.6) 221dbeee392SMarkus Armbruster# 222dbeee392SMarkus Armbruster# Since: 1.4 223dbeee392SMarkus Armbruster## 224b0ddeba2SMarc-André Lureau{ 'struct': 'ChardevFile', 225b0ddeba2SMarc-André Lureau 'data': { '*in': 'str', 226dbeee392SMarkus Armbruster 'out': 'str', 227dbeee392SMarkus Armbruster '*append': 'bool' }, 228dbeee392SMarkus Armbruster 'base': 'ChardevCommon' } 229dbeee392SMarkus Armbruster 230dbeee392SMarkus Armbruster## 231dbeee392SMarkus Armbruster# @ChardevHostdev: 232dbeee392SMarkus Armbruster# 233dbeee392SMarkus Armbruster# Configuration info for device and pipe chardevs. 234dbeee392SMarkus Armbruster# 235a937b6aaSMarkus Armbruster# @device: The name of the special file for the device, i.e. 236a937b6aaSMarkus Armbruster# /dev/ttyS0 on Unix or COM1: on Windows 237dbeee392SMarkus Armbruster# 238dbeee392SMarkus Armbruster# Since: 1.4 239dbeee392SMarkus Armbruster## 240b0ddeba2SMarc-André Lureau{ 'struct': 'ChardevHostdev', 241b0ddeba2SMarc-André Lureau 'data': { 'device': 'str' }, 242dbeee392SMarkus Armbruster 'base': 'ChardevCommon' } 243dbeee392SMarkus Armbruster 244dbeee392SMarkus Armbruster## 245dbeee392SMarkus Armbruster# @ChardevSocket: 246dbeee392SMarkus Armbruster# 247dbeee392SMarkus Armbruster# Configuration info for (stream) socket chardevs. 248dbeee392SMarkus Armbruster# 249a937b6aaSMarkus Armbruster# @addr: socket address to listen on (server=true) or connect to 250a937b6aaSMarkus Armbruster# (server=false) 251a937b6aaSMarkus Armbruster# 252dbeee392SMarkus Armbruster# @tls-creds: the ID of the TLS credentials object (since 2.6) 253a937b6aaSMarkus Armbruster# 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 256a937b6aaSMarkus Armbruster# object is only resolved at time of use, so can be deleted and 257a937b6aaSMarkus Armbruster# recreated on the fly while the chardev server is active. If 258a937b6aaSMarkus Armbruster# missing, it will default to denying access (since 4.0) 259a937b6aaSMarkus Armbruster# 260dbeee392SMarkus Armbruster# @server: create server socket (default: true) 261a937b6aaSMarkus Armbruster# 262a937b6aaSMarkus Armbruster# @wait: wait for incoming connection on server sockets (default: 263a937b6aaSMarkus Armbruster# false). Silently ignored with server: false. This use is 264a937b6aaSMarkus Armbruster# deprecated. 265a937b6aaSMarkus Armbruster# 266dbeee392SMarkus Armbruster# @nodelay: set TCP_NODELAY socket option (default: false) 267a937b6aaSMarkus Armbruster# 268a937b6aaSMarkus Armbruster# @telnet: enable telnet protocol on server sockets (default: false) 269a937b6aaSMarkus Armbruster# 270a937b6aaSMarkus Armbruster# @tn3270: enable tn3270 protocol on server sockets (default: false) 271a937b6aaSMarkus Armbruster# (Since: 2.10) 272a937b6aaSMarkus Armbruster# 273a937b6aaSMarkus Armbruster# @websocket: enable websocket protocol on server sockets 274a937b6aaSMarkus Armbruster# (default: false) (Since: 3.1) 275a937b6aaSMarkus Armbruster# 276a937b6aaSMarkus Armbruster# @reconnect: For a client socket, if a socket is disconnected, then 277a937b6aaSMarkus Armbruster# attempt a reconnect after the given number of seconds. Setting 278a937b6aaSMarkus Armbruster# this to zero disables this function. (default: 0) (Since: 2.2) 279dbeee392SMarkus Armbruster# 280dbeee392SMarkus Armbruster# Since: 1.4 281dbeee392SMarkus Armbruster## 282b0ddeba2SMarc-André Lureau{ 'struct': 'ChardevSocket', 283b0ddeba2SMarc-André Lureau 'data': { 'addr': 'SocketAddressLegacy', 284dbeee392SMarkus Armbruster '*tls-creds': 'str', 285fd4a5fd4SDaniel P. Berrange '*tls-authz' : 'str', 286dbeee392SMarkus Armbruster '*server': 'bool', 287dbeee392SMarkus Armbruster '*wait': 'bool', 288dbeee392SMarkus Armbruster '*nodelay': 'bool', 289dbeee392SMarkus Armbruster '*telnet': 'bool', 290dbeee392SMarkus Armbruster '*tn3270': 'bool', 291981b06e7SJulia Suvorova '*websocket': 'bool', 292dbeee392SMarkus Armbruster '*reconnect': 'int' }, 293dbeee392SMarkus Armbruster 'base': 'ChardevCommon' } 294dbeee392SMarkus Armbruster 295dbeee392SMarkus Armbruster## 296dbeee392SMarkus Armbruster# @ChardevUdp: 297dbeee392SMarkus Armbruster# 298dbeee392SMarkus Armbruster# Configuration info for datagram socket chardevs. 299dbeee392SMarkus Armbruster# 300dbeee392SMarkus Armbruster# @remote: remote address 301a937b6aaSMarkus Armbruster# 302dbeee392SMarkus Armbruster# @local: local address 303dbeee392SMarkus Armbruster# 304dbeee392SMarkus Armbruster# Since: 1.5 305dbeee392SMarkus Armbruster## 306b0ddeba2SMarc-André Lureau{ 'struct': 'ChardevUdp', 307b0ddeba2SMarc-André Lureau 'data': { 'remote': 'SocketAddressLegacy', 308dbeee392SMarkus Armbruster '*local': 'SocketAddressLegacy' }, 309dbeee392SMarkus Armbruster 'base': 'ChardevCommon' } 310dbeee392SMarkus Armbruster 311dbeee392SMarkus Armbruster## 312dbeee392SMarkus Armbruster# @ChardevMux: 313dbeee392SMarkus Armbruster# 314dbeee392SMarkus Armbruster# Configuration info for mux chardevs. 315dbeee392SMarkus Armbruster# 316dbeee392SMarkus Armbruster# @chardev: name of the base chardev. 317dbeee392SMarkus Armbruster# 318dbeee392SMarkus Armbruster# Since: 1.5 319dbeee392SMarkus Armbruster## 320b0ddeba2SMarc-André Lureau{ 'struct': 'ChardevMux', 321b0ddeba2SMarc-André Lureau 'data': { 'chardev': 'str' }, 322dbeee392SMarkus Armbruster 'base': 'ChardevCommon' } 323dbeee392SMarkus Armbruster 324dbeee392SMarkus Armbruster## 325dbeee392SMarkus Armbruster# @ChardevStdio: 326dbeee392SMarkus Armbruster# 327dbeee392SMarkus Armbruster# Configuration info for stdio chardevs. 328dbeee392SMarkus Armbruster# 329a937b6aaSMarkus Armbruster# @signal: Allow signals (such as SIGINT triggered by ^C) be delivered 330a937b6aaSMarkus Armbruster# to qemu. Default: true. 331dbeee392SMarkus Armbruster# 332dbeee392SMarkus Armbruster# Since: 1.5 333dbeee392SMarkus Armbruster## 334b0ddeba2SMarc-André Lureau{ 'struct': 'ChardevStdio', 335b0ddeba2SMarc-André Lureau 'data': { '*signal': 'bool' }, 336dbeee392SMarkus Armbruster 'base': 'ChardevCommon' } 337dbeee392SMarkus Armbruster 338dbeee392SMarkus Armbruster## 339dbeee392SMarkus Armbruster# @ChardevSpiceChannel: 340dbeee392SMarkus Armbruster# 341dbeee392SMarkus Armbruster# Configuration info for spice vm channel chardevs. 342dbeee392SMarkus Armbruster# 343dbeee392SMarkus Armbruster# @type: kind of channel (for example vdagent). 344dbeee392SMarkus Armbruster# 345dbeee392SMarkus Armbruster# Since: 1.5 346dbeee392SMarkus Armbruster## 347b0ddeba2SMarc-André Lureau{ 'struct': 'ChardevSpiceChannel', 348b0ddeba2SMarc-André Lureau 'data': { 'type': 'str' }, 349fd9dda3bSMarc-André Lureau 'base': 'ChardevCommon', 3508a9f1e1dSMarc-André Lureau 'if': 'CONFIG_SPICE' } 351dbeee392SMarkus Armbruster 352dbeee392SMarkus Armbruster## 353dbeee392SMarkus Armbruster# @ChardevSpicePort: 354dbeee392SMarkus Armbruster# 355dbeee392SMarkus Armbruster# Configuration info for spice port chardevs. 356dbeee392SMarkus Armbruster# 357dbeee392SMarkus Armbruster# @fqdn: name of the channel (see docs/spice-port-fqdn.txt) 358dbeee392SMarkus Armbruster# 359dbeee392SMarkus Armbruster# Since: 1.5 360dbeee392SMarkus Armbruster## 361b0ddeba2SMarc-André Lureau{ 'struct': 'ChardevSpicePort', 362b0ddeba2SMarc-André Lureau 'data': { 'fqdn': 'str' }, 363fd9dda3bSMarc-André Lureau 'base': 'ChardevCommon', 3648a9f1e1dSMarc-André Lureau 'if': 'CONFIG_SPICE' } 365dbeee392SMarkus Armbruster 366dbeee392SMarkus Armbruster## 3673e301c8dSMarc-André Lureau# @ChardevDBus: 3683e301c8dSMarc-André Lureau# 3693e301c8dSMarc-André Lureau# Configuration info for DBus chardevs. 3703e301c8dSMarc-André Lureau# 3713e301c8dSMarc-André Lureau# @name: name of the channel (following docs/spice-port-fqdn.txt) 3723e301c8dSMarc-André Lureau# 3733e301c8dSMarc-André Lureau# Since: 7.0 3743e301c8dSMarc-André Lureau## 3753e301c8dSMarc-André Lureau{ 'struct': 'ChardevDBus', 3763e301c8dSMarc-André Lureau 'data': { 'name': 'str' }, 3773e301c8dSMarc-André Lureau 'base': 'ChardevCommon', 3783e301c8dSMarc-André Lureau 'if': 'CONFIG_DBUS_DISPLAY' } 3793e301c8dSMarc-André Lureau 3803e301c8dSMarc-André Lureau## 381dbeee392SMarkus Armbruster# @ChardevVC: 382dbeee392SMarkus Armbruster# 383dbeee392SMarkus Armbruster# Configuration info for virtual console chardevs. 384dbeee392SMarkus Armbruster# 385dbeee392SMarkus Armbruster# @width: console width, in pixels 386a937b6aaSMarkus Armbruster# 387dbeee392SMarkus Armbruster# @height: console height, in pixels 388a937b6aaSMarkus Armbruster# 389dbeee392SMarkus Armbruster# @cols: console width, in chars 390a937b6aaSMarkus Armbruster# 391dbeee392SMarkus Armbruster# @rows: console height, in chars 392dbeee392SMarkus Armbruster# 39332aa1f8dSMarc-André Lureau# Note: the options are only effective when the VNC or SDL graphical 394*e6ab40feSMarkus Armbruster# display backend is active. They are ignored with the GTK, 395*e6ab40feSMarkus Armbruster# Spice, VNC and D-Bus display backends. 39632aa1f8dSMarc-André Lureau# 397dbeee392SMarkus Armbruster# Since: 1.5 398dbeee392SMarkus Armbruster## 399b0ddeba2SMarc-André Lureau{ 'struct': 'ChardevVC', 400b0ddeba2SMarc-André Lureau 'data': { '*width': 'int', 401dbeee392SMarkus Armbruster '*height': 'int', 402dbeee392SMarkus Armbruster '*cols': 'int', 403dbeee392SMarkus Armbruster '*rows': 'int' }, 404dbeee392SMarkus Armbruster 'base': 'ChardevCommon' } 405dbeee392SMarkus Armbruster 406dbeee392SMarkus Armbruster## 407dbeee392SMarkus Armbruster# @ChardevRingbuf: 408dbeee392SMarkus Armbruster# 409dbeee392SMarkus Armbruster# Configuration info for ring buffer chardevs. 410dbeee392SMarkus Armbruster# 411dbeee392SMarkus Armbruster# @size: ring buffer size, must be power of two, default is 65536 412dbeee392SMarkus Armbruster# 413dbeee392SMarkus Armbruster# Since: 1.5 414dbeee392SMarkus Armbruster## 415b0ddeba2SMarc-André Lureau{ 'struct': 'ChardevRingbuf', 416b0ddeba2SMarc-André Lureau 'data': { '*size': 'int' }, 417dbeee392SMarkus Armbruster 'base': 'ChardevCommon' } 418dbeee392SMarkus Armbruster 419dbeee392SMarkus Armbruster## 420de74a22cSGerd Hoffmann# @ChardevQemuVDAgent: 421de74a22cSGerd Hoffmann# 422de74a22cSGerd Hoffmann# Configuration info for qemu vdagent implementation. 423de74a22cSGerd Hoffmann# 42456081919SGerd Hoffmann# @mouse: enable/disable mouse, default is enabled. 425a937b6aaSMarkus Armbruster# 426f0349f4dSGerd Hoffmann# @clipboard: enable/disable clipboard, default is disabled. 42756081919SGerd Hoffmann# 428de74a22cSGerd Hoffmann# Since: 6.1 429de74a22cSGerd Hoffmann## 430de74a22cSGerd Hoffmann{ 'struct': 'ChardevQemuVDAgent', 431f0349f4dSGerd Hoffmann 'data': { '*mouse': 'bool', 432f0349f4dSGerd Hoffmann '*clipboard': 'bool' }, 433de74a22cSGerd Hoffmann 'base': 'ChardevCommon', 4348a9f1e1dSMarc-André Lureau 'if': 'CONFIG_SPICE_PROTOCOL' } 435de74a22cSGerd Hoffmann 436de74a22cSGerd Hoffmann## 4373218c0e9SMarkus Armbruster# @ChardevBackendKind: 4383218c0e9SMarkus Armbruster# 4393218c0e9SMarkus Armbruster# @pipe: Since 1.5 440a937b6aaSMarkus Armbruster# 4413218c0e9SMarkus Armbruster# @udp: Since 1.5 442a937b6aaSMarkus Armbruster# 4433218c0e9SMarkus Armbruster# @mux: Since 1.5 444a937b6aaSMarkus Armbruster# 4453218c0e9SMarkus Armbruster# @msmouse: Since 1.5 446a937b6aaSMarkus Armbruster# 4473218c0e9SMarkus Armbruster# @wctablet: Since 2.9 448a937b6aaSMarkus Armbruster# 4493218c0e9SMarkus Armbruster# @braille: Since 1.5 450a937b6aaSMarkus Armbruster# 4513218c0e9SMarkus Armbruster# @testdev: Since 2.2 452a937b6aaSMarkus Armbruster# 4533218c0e9SMarkus Armbruster# @stdio: Since 1.5 454a937b6aaSMarkus Armbruster# 4553218c0e9SMarkus Armbruster# @console: Since 1.5 456a937b6aaSMarkus Armbruster# 4573218c0e9SMarkus Armbruster# @spicevmc: Since 1.5 458a937b6aaSMarkus Armbruster# 4593218c0e9SMarkus Armbruster# @spiceport: Since 1.5 460a937b6aaSMarkus Armbruster# 4613218c0e9SMarkus Armbruster# @qemu-vdagent: Since 6.1 462a937b6aaSMarkus Armbruster# 4633e301c8dSMarc-André Lureau# @dbus: Since 7.0 464a937b6aaSMarkus Armbruster# 4653218c0e9SMarkus Armbruster# @vc: v1.5 466a937b6aaSMarkus Armbruster# 4673218c0e9SMarkus Armbruster# @ringbuf: Since 1.6 468a937b6aaSMarkus Armbruster# 4693218c0e9SMarkus Armbruster# @memory: Since 1.5 4703218c0e9SMarkus Armbruster# 4713218c0e9SMarkus Armbruster# Since: 1.4 4723218c0e9SMarkus Armbruster## 4733218c0e9SMarkus Armbruster{ 'enum': 'ChardevBackendKind', 4743218c0e9SMarkus Armbruster 'data': [ 'file', 4753218c0e9SMarkus Armbruster 'serial', 4763218c0e9SMarkus Armbruster 'parallel', 4773218c0e9SMarkus Armbruster 'pipe', 4783218c0e9SMarkus Armbruster 'socket', 4793218c0e9SMarkus Armbruster 'udp', 4803218c0e9SMarkus Armbruster 'pty', 4813218c0e9SMarkus Armbruster 'null', 4823218c0e9SMarkus Armbruster 'mux', 4833218c0e9SMarkus Armbruster 'msmouse', 4843218c0e9SMarkus Armbruster 'wctablet', 4853218c0e9SMarkus Armbruster 'braille', 4863218c0e9SMarkus Armbruster 'testdev', 4873218c0e9SMarkus Armbruster 'stdio', 4883218c0e9SMarkus Armbruster 'console', 4893218c0e9SMarkus Armbruster { 'name': 'spicevmc', 'if': 'CONFIG_SPICE' }, 4903218c0e9SMarkus Armbruster { 'name': 'spiceport', 'if': 'CONFIG_SPICE' }, 4913218c0e9SMarkus Armbruster { 'name': 'qemu-vdagent', 'if': 'CONFIG_SPICE_PROTOCOL' }, 4923e301c8dSMarc-André Lureau { 'name': 'dbus', 'if': 'CONFIG_DBUS_DISPLAY' }, 4933218c0e9SMarkus Armbruster 'vc', 4943218c0e9SMarkus Armbruster 'ringbuf', 4953218c0e9SMarkus Armbruster # next one is just for compatibility 4963218c0e9SMarkus Armbruster 'memory' ] } 4973218c0e9SMarkus Armbruster 4983218c0e9SMarkus Armbruster## 4993218c0e9SMarkus Armbruster# @ChardevFileWrapper: 5003218c0e9SMarkus Armbruster# 5013218c0e9SMarkus Armbruster# Since: 1.4 5023218c0e9SMarkus Armbruster## 5033218c0e9SMarkus Armbruster{ 'struct': 'ChardevFileWrapper', 5043218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevFile' } } 5053218c0e9SMarkus Armbruster 5063218c0e9SMarkus Armbruster## 5073218c0e9SMarkus Armbruster# @ChardevHostdevWrapper: 5083218c0e9SMarkus Armbruster# 5093218c0e9SMarkus Armbruster# Since: 1.4 5103218c0e9SMarkus Armbruster## 5113218c0e9SMarkus Armbruster{ 'struct': 'ChardevHostdevWrapper', 5123218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevHostdev' } } 5133218c0e9SMarkus Armbruster 5143218c0e9SMarkus Armbruster## 5153218c0e9SMarkus Armbruster# @ChardevSocketWrapper: 5163218c0e9SMarkus Armbruster# 5173218c0e9SMarkus Armbruster# Since: 1.4 5183218c0e9SMarkus Armbruster## 5193218c0e9SMarkus Armbruster{ 'struct': 'ChardevSocketWrapper', 5203218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevSocket' } } 5213218c0e9SMarkus Armbruster 5223218c0e9SMarkus Armbruster## 5233218c0e9SMarkus Armbruster# @ChardevUdpWrapper: 5243218c0e9SMarkus Armbruster# 5253218c0e9SMarkus Armbruster# Since: 1.5 5263218c0e9SMarkus Armbruster## 5273218c0e9SMarkus Armbruster{ 'struct': 'ChardevUdpWrapper', 5283218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevUdp' } } 5293218c0e9SMarkus Armbruster 5303218c0e9SMarkus Armbruster## 5313218c0e9SMarkus Armbruster# @ChardevCommonWrapper: 5323218c0e9SMarkus Armbruster# 5333218c0e9SMarkus Armbruster# Since: 2.6 5343218c0e9SMarkus Armbruster## 5353218c0e9SMarkus Armbruster{ 'struct': 'ChardevCommonWrapper', 5363218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevCommon' } } 5373218c0e9SMarkus Armbruster 5383218c0e9SMarkus Armbruster## 5393218c0e9SMarkus Armbruster# @ChardevMuxWrapper: 5403218c0e9SMarkus Armbruster# 5413218c0e9SMarkus Armbruster# Since: 1.5 5423218c0e9SMarkus Armbruster## 5433218c0e9SMarkus Armbruster{ 'struct': 'ChardevMuxWrapper', 5443218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevMux' } } 5453218c0e9SMarkus Armbruster 5463218c0e9SMarkus Armbruster## 5473218c0e9SMarkus Armbruster# @ChardevStdioWrapper: 5483218c0e9SMarkus Armbruster# 5493218c0e9SMarkus Armbruster# Since: 1.5 5503218c0e9SMarkus Armbruster## 5513218c0e9SMarkus Armbruster{ 'struct': 'ChardevStdioWrapper', 5523218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevStdio' } } 5533218c0e9SMarkus Armbruster 5543218c0e9SMarkus Armbruster## 5553218c0e9SMarkus Armbruster# @ChardevSpiceChannelWrapper: 5563218c0e9SMarkus Armbruster# 5573218c0e9SMarkus Armbruster# Since: 1.5 5583218c0e9SMarkus Armbruster## 5593218c0e9SMarkus Armbruster{ 'struct': 'ChardevSpiceChannelWrapper', 5603218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevSpiceChannel' }, 5613218c0e9SMarkus Armbruster 'if': 'CONFIG_SPICE' } 5623218c0e9SMarkus Armbruster 5633218c0e9SMarkus Armbruster## 5643218c0e9SMarkus Armbruster# @ChardevSpicePortWrapper: 5653218c0e9SMarkus Armbruster# 5663218c0e9SMarkus Armbruster# Since: 1.5 5673218c0e9SMarkus Armbruster## 5683218c0e9SMarkus Armbruster{ 'struct': 'ChardevSpicePortWrapper', 5693218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevSpicePort' }, 5703218c0e9SMarkus Armbruster 'if': 'CONFIG_SPICE' } 5713218c0e9SMarkus Armbruster 5723218c0e9SMarkus Armbruster## 5733218c0e9SMarkus Armbruster# @ChardevQemuVDAgentWrapper: 5743218c0e9SMarkus Armbruster# 5753218c0e9SMarkus Armbruster# Since: 6.1 5763218c0e9SMarkus Armbruster## 5773218c0e9SMarkus Armbruster{ 'struct': 'ChardevQemuVDAgentWrapper', 5783218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevQemuVDAgent' }, 5793218c0e9SMarkus Armbruster 'if': 'CONFIG_SPICE_PROTOCOL' } 5803218c0e9SMarkus Armbruster 5813218c0e9SMarkus Armbruster## 5823e301c8dSMarc-André Lureau# @ChardevDBusWrapper: 5833e301c8dSMarc-André Lureau# 5843e301c8dSMarc-André Lureau# Since: 7.0 5853e301c8dSMarc-André Lureau## 5863e301c8dSMarc-André Lureau{ 'struct': 'ChardevDBusWrapper', 5873e301c8dSMarc-André Lureau 'data': { 'data': 'ChardevDBus' }, 5883e301c8dSMarc-André Lureau 'if': 'CONFIG_DBUS_DISPLAY' } 5893e301c8dSMarc-André Lureau 5903e301c8dSMarc-André Lureau## 5913218c0e9SMarkus Armbruster# @ChardevVCWrapper: 5923218c0e9SMarkus Armbruster# 5933218c0e9SMarkus Armbruster# Since: 1.5 5943218c0e9SMarkus Armbruster## 5953218c0e9SMarkus Armbruster{ 'struct': 'ChardevVCWrapper', 5963218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevVC' } } 5973218c0e9SMarkus Armbruster 5983218c0e9SMarkus Armbruster## 5993218c0e9SMarkus Armbruster# @ChardevRingbufWrapper: 6003218c0e9SMarkus Armbruster# 6013218c0e9SMarkus Armbruster# Since: 1.5 6023218c0e9SMarkus Armbruster## 6033218c0e9SMarkus Armbruster{ 'struct': 'ChardevRingbufWrapper', 6043218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevRingbuf' } } 6053218c0e9SMarkus Armbruster 6063218c0e9SMarkus Armbruster## 607dbeee392SMarkus Armbruster# @ChardevBackend: 608dbeee392SMarkus Armbruster# 609dbeee392SMarkus Armbruster# Configuration info for the new chardev backend. 610dbeee392SMarkus Armbruster# 6113218c0e9SMarkus Armbruster# Since: 1.4 612dbeee392SMarkus Armbruster## 613b0ddeba2SMarc-André Lureau{ 'union': 'ChardevBackend', 6143218c0e9SMarkus Armbruster 'base': { 'type': 'ChardevBackendKind' }, 6153218c0e9SMarkus Armbruster 'discriminator': 'type', 6163218c0e9SMarkus Armbruster 'data': { 'file': 'ChardevFileWrapper', 6173218c0e9SMarkus Armbruster 'serial': 'ChardevHostdevWrapper', 6183218c0e9SMarkus Armbruster 'parallel': 'ChardevHostdevWrapper', 6193218c0e9SMarkus Armbruster 'pipe': 'ChardevHostdevWrapper', 6203218c0e9SMarkus Armbruster 'socket': 'ChardevSocketWrapper', 6213218c0e9SMarkus Armbruster 'udp': 'ChardevUdpWrapper', 6223218c0e9SMarkus Armbruster 'pty': 'ChardevCommonWrapper', 6233218c0e9SMarkus Armbruster 'null': 'ChardevCommonWrapper', 6243218c0e9SMarkus Armbruster 'mux': 'ChardevMuxWrapper', 6253218c0e9SMarkus Armbruster 'msmouse': 'ChardevCommonWrapper', 6263218c0e9SMarkus Armbruster 'wctablet': 'ChardevCommonWrapper', 6273218c0e9SMarkus Armbruster 'braille': 'ChardevCommonWrapper', 6283218c0e9SMarkus Armbruster 'testdev': 'ChardevCommonWrapper', 6293218c0e9SMarkus Armbruster 'stdio': 'ChardevStdioWrapper', 6303218c0e9SMarkus Armbruster 'console': 'ChardevCommonWrapper', 6313218c0e9SMarkus Armbruster 'spicevmc': { 'type': 'ChardevSpiceChannelWrapper', 6328a9f1e1dSMarc-André Lureau 'if': 'CONFIG_SPICE' }, 6333218c0e9SMarkus Armbruster 'spiceport': { 'type': 'ChardevSpicePortWrapper', 6348a9f1e1dSMarc-André Lureau 'if': 'CONFIG_SPICE' }, 6353218c0e9SMarkus Armbruster 'qemu-vdagent': { 'type': 'ChardevQemuVDAgentWrapper', 6368a9f1e1dSMarc-André Lureau 'if': 'CONFIG_SPICE_PROTOCOL' }, 6373e301c8dSMarc-André Lureau 'dbus': { 'type': 'ChardevDBusWrapper', 6383e301c8dSMarc-André Lureau 'if': 'CONFIG_DBUS_DISPLAY' }, 6393218c0e9SMarkus Armbruster 'vc': 'ChardevVCWrapper', 6403218c0e9SMarkus Armbruster 'ringbuf': 'ChardevRingbufWrapper', 641dbeee392SMarkus Armbruster # next one is just for compatibility 6423218c0e9SMarkus Armbruster 'memory': 'ChardevRingbufWrapper' } } 643dbeee392SMarkus Armbruster 644dbeee392SMarkus Armbruster## 645dbeee392SMarkus Armbruster# @ChardevReturn: 646dbeee392SMarkus Armbruster# 647dbeee392SMarkus Armbruster# Return info about the chardev backend just created. 648dbeee392SMarkus Armbruster# 649a937b6aaSMarkus Armbruster# @pty: name of the slave pseudoterminal device, present if and only 650a937b6aaSMarkus Armbruster# if a chardev of type 'pty' was created 651dbeee392SMarkus Armbruster# 652dbeee392SMarkus Armbruster# Since: 1.4 653dbeee392SMarkus Armbruster## 654b0ddeba2SMarc-André Lureau{ 'struct' : 'ChardevReturn', 655b0ddeba2SMarc-André Lureau 'data': { '*pty': 'str' } } 656dbeee392SMarkus Armbruster 657dbeee392SMarkus Armbruster## 658dbeee392SMarkus Armbruster# @chardev-add: 659dbeee392SMarkus Armbruster# 660dbeee392SMarkus Armbruster# Add a character device backend 661dbeee392SMarkus Armbruster# 662dbeee392SMarkus Armbruster# @id: the chardev's ID, must be unique 663a937b6aaSMarkus Armbruster# 664dbeee392SMarkus Armbruster# @backend: backend type and parameters 665dbeee392SMarkus Armbruster# 666dbeee392SMarkus Armbruster# Returns: ChardevReturn. 667dbeee392SMarkus Armbruster# 668dbeee392SMarkus Armbruster# Since: 1.4 669dbeee392SMarkus Armbruster# 67037fa48a4SMarkus Armbruster# Examples: 671dbeee392SMarkus Armbruster# 672dbeee392SMarkus Armbruster# -> { "execute" : "chardev-add", 673dbeee392SMarkus Armbruster# "arguments" : { "id" : "foo", 674dbeee392SMarkus Armbruster# "backend" : { "type" : "null", "data" : {} } } } 675dbeee392SMarkus Armbruster# <- { "return": {} } 676dbeee392SMarkus Armbruster# 677dbeee392SMarkus Armbruster# -> { "execute" : "chardev-add", 678dbeee392SMarkus Armbruster# "arguments" : { "id" : "bar", 679dbeee392SMarkus Armbruster# "backend" : { "type" : "file", 680dbeee392SMarkus Armbruster# "data" : { "out" : "/tmp/bar.log" } } } } 681dbeee392SMarkus Armbruster# <- { "return": {} } 682dbeee392SMarkus Armbruster# 683dbeee392SMarkus Armbruster# -> { "execute" : "chardev-add", 684dbeee392SMarkus Armbruster# "arguments" : { "id" : "baz", 685dbeee392SMarkus Armbruster# "backend" : { "type" : "pty", "data" : {} } } } 686dbeee392SMarkus Armbruster# <- { "return": { "pty" : "/dev/pty/42" } } 687dbeee392SMarkus Armbruster## 688b0ddeba2SMarc-André Lureau{ 'command': 'chardev-add', 689b0ddeba2SMarc-André Lureau 'data': { 'id': 'str', 690dbeee392SMarkus Armbruster 'backend': 'ChardevBackend' }, 691dbeee392SMarkus Armbruster 'returns': 'ChardevReturn' } 692dbeee392SMarkus Armbruster 693dbeee392SMarkus Armbruster## 694dbeee392SMarkus Armbruster# @chardev-change: 695dbeee392SMarkus Armbruster# 696dbeee392SMarkus Armbruster# Change a character device backend 697dbeee392SMarkus Armbruster# 698dbeee392SMarkus Armbruster# @id: the chardev's ID, must exist 699a937b6aaSMarkus Armbruster# 700dbeee392SMarkus Armbruster# @backend: new backend type and parameters 701dbeee392SMarkus Armbruster# 702dbeee392SMarkus Armbruster# Returns: ChardevReturn. 703dbeee392SMarkus Armbruster# 704dbeee392SMarkus Armbruster# Since: 2.10 705dbeee392SMarkus Armbruster# 70637fa48a4SMarkus Armbruster# Examples: 707dbeee392SMarkus Armbruster# 708dbeee392SMarkus Armbruster# -> { "execute" : "chardev-change", 709dbeee392SMarkus Armbruster# "arguments" : { "id" : "baz", 710dbeee392SMarkus Armbruster# "backend" : { "type" : "pty", "data" : {} } } } 711dbeee392SMarkus Armbruster# <- { "return": { "pty" : "/dev/pty/42" } } 712dbeee392SMarkus Armbruster# 713dbeee392SMarkus Armbruster# -> {"execute" : "chardev-change", 714dbeee392SMarkus Armbruster# "arguments" : { 715dbeee392SMarkus Armbruster# "id" : "charchannel2", 716dbeee392SMarkus Armbruster# "backend" : { 717dbeee392SMarkus Armbruster# "type" : "socket", 718dbeee392SMarkus Armbruster# "data" : { 719dbeee392SMarkus Armbruster# "addr" : { 720dbeee392SMarkus Armbruster# "type" : "unix" , 721dbeee392SMarkus Armbruster# "data" : { 722dbeee392SMarkus Armbruster# "path" : "/tmp/charchannel2.socket" 723dbeee392SMarkus Armbruster# } 724dbeee392SMarkus Armbruster# }, 725dbeee392SMarkus Armbruster# "server" : true, 726dbeee392SMarkus Armbruster# "wait" : false }}}} 727dbeee392SMarkus Armbruster# <- {"return": {}} 728dbeee392SMarkus Armbruster## 729b0ddeba2SMarc-André Lureau{ 'command': 'chardev-change', 730b0ddeba2SMarc-André Lureau 'data': { 'id': 'str', 731dbeee392SMarkus Armbruster 'backend': 'ChardevBackend' }, 732dbeee392SMarkus Armbruster 'returns': 'ChardevReturn' } 733dbeee392SMarkus Armbruster 734dbeee392SMarkus Armbruster## 735dbeee392SMarkus Armbruster# @chardev-remove: 736dbeee392SMarkus Armbruster# 737dbeee392SMarkus Armbruster# Remove a character device backend 738dbeee392SMarkus Armbruster# 739dbeee392SMarkus Armbruster# @id: the chardev's ID, must exist and not be in use 740dbeee392SMarkus Armbruster# 741dbeee392SMarkus Armbruster# Returns: Nothing on success 742dbeee392SMarkus Armbruster# 743dbeee392SMarkus Armbruster# Since: 1.4 744dbeee392SMarkus Armbruster# 745dbeee392SMarkus Armbruster# Example: 746dbeee392SMarkus Armbruster# 747dbeee392SMarkus Armbruster# -> { "execute": "chardev-remove", "arguments": { "id" : "foo" } } 748dbeee392SMarkus Armbruster# <- { "return": {} } 749dbeee392SMarkus Armbruster## 750b0ddeba2SMarc-André Lureau{ 'command': 'chardev-remove', 751b0ddeba2SMarc-André Lureau 'data': { 'id': 'str' } } 752dbeee392SMarkus Armbruster 753dbeee392SMarkus Armbruster## 754dbeee392SMarkus Armbruster# @chardev-send-break: 755dbeee392SMarkus Armbruster# 756dbeee392SMarkus Armbruster# Send a break to a character device 757dbeee392SMarkus Armbruster# 758dbeee392SMarkus Armbruster# @id: the chardev's ID, must exist 759dbeee392SMarkus Armbruster# 760dbeee392SMarkus Armbruster# Returns: Nothing on success 761dbeee392SMarkus Armbruster# 762dbeee392SMarkus Armbruster# Since: 2.10 763dbeee392SMarkus Armbruster# 764dbeee392SMarkus Armbruster# Example: 765dbeee392SMarkus Armbruster# 766dbeee392SMarkus Armbruster# -> { "execute": "chardev-send-break", "arguments": { "id" : "foo" } } 767dbeee392SMarkus Armbruster# <- { "return": {} } 768dbeee392SMarkus Armbruster## 769b0ddeba2SMarc-André Lureau{ 'command': 'chardev-send-break', 770b0ddeba2SMarc-André Lureau 'data': { 'id': 'str' } } 771dbeee392SMarkus Armbruster 772dbeee392SMarkus Armbruster## 773dbeee392SMarkus Armbruster# @VSERPORT_CHANGE: 774dbeee392SMarkus Armbruster# 775dbeee392SMarkus Armbruster# Emitted when the guest opens or closes a virtio-serial port. 776dbeee392SMarkus Armbruster# 777dbeee392SMarkus Armbruster# @id: device identifier of the virtio-serial port 778dbeee392SMarkus Armbruster# 779dbeee392SMarkus Armbruster# @open: true if the guest has opened the virtio-serial port 780dbeee392SMarkus Armbruster# 781382bd1cbSMarkus Armbruster# Note: This event is rate-limited. 782382bd1cbSMarkus Armbruster# 783dbeee392SMarkus Armbruster# Since: 2.1 784dbeee392SMarkus Armbruster# 785dbeee392SMarkus Armbruster# Example: 786dbeee392SMarkus Armbruster# 787dbeee392SMarkus Armbruster# <- { "event": "VSERPORT_CHANGE", 788dbeee392SMarkus Armbruster# "data": { "id": "channel0", "open": true }, 789dbeee392SMarkus Armbruster# "timestamp": { "seconds": 1401385907, "microseconds": 422329 } } 790dbeee392SMarkus Armbruster## 791dbeee392SMarkus Armbruster{ 'event': 'VSERPORT_CHANGE', 792b0ddeba2SMarc-André Lureau 'data': { 'id': 'str', 793b0ddeba2SMarc-André Lureau 'open': 'bool' } } 794