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# 20*a937b6aaSMarkus Armbruster# @frontend-open: shows whether the frontend device attached to this 21*a937b6aaSMarkus Armbruster# backend (eg. with the chardev=... option) is in open or closed 22*a937b6aaSMarkus Armbruster# state (since 2.1) 23dbeee392SMarkus Armbruster# 24*a937b6aaSMarkus Armbruster# Notes: @filename is encoded using the QEMU command line character 25*a937b6aaSMarkus 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# 136*a937b6aaSMarkus Armbruster# - base64: data must be base64 encoded text. Its binary decoding 137*a937b6aaSMarkus Armbruster# gets written. 138dbeee392SMarkus Armbruster# - utf8: data's UTF-8 encoding is written 139*a937b6aaSMarkus Armbruster# - data itself is always Unicode regardless of format, like any 140*a937b6aaSMarkus 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 173*a937b6aaSMarkus Armbruster# sequences, NUL characters, after the ring buffer lost data, 174*a937b6aaSMarkus Armbruster# and when reading stops because the size limit is reached. 175*a937b6aaSMarkus Armbruster# - The return value is always Unicode regardless of format, like 176*a937b6aaSMarkus 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 200*a937b6aaSMarkus Armbruster# 201*a937b6aaSMarkus Armbruster# @logappend: true to append instead of truncate (default to false to 202*a937b6aaSMarkus 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 216*a937b6aaSMarkus Armbruster# 217dbeee392SMarkus Armbruster# @out: The name of the output file 218*a937b6aaSMarkus Armbruster# 219*a937b6aaSMarkus Armbruster# @append: Open the file in append mode (default false to truncate) 220*a937b6aaSMarkus 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# 235*a937b6aaSMarkus Armbruster# @device: The name of the special file for the device, i.e. 236*a937b6aaSMarkus 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# 249*a937b6aaSMarkus Armbruster# @addr: socket address to listen on (server=true) or connect to 250*a937b6aaSMarkus Armbruster# (server=false) 251*a937b6aaSMarkus Armbruster# 252dbeee392SMarkus Armbruster# @tls-creds: the ID of the TLS credentials object (since 2.6) 253*a937b6aaSMarkus 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 256*a937b6aaSMarkus Armbruster# object is only resolved at time of use, so can be deleted and 257*a937b6aaSMarkus Armbruster# recreated on the fly while the chardev server is active. If 258*a937b6aaSMarkus Armbruster# missing, it will default to denying access (since 4.0) 259*a937b6aaSMarkus Armbruster# 260dbeee392SMarkus Armbruster# @server: create server socket (default: true) 261*a937b6aaSMarkus Armbruster# 262*a937b6aaSMarkus Armbruster# @wait: wait for incoming connection on server sockets (default: 263*a937b6aaSMarkus Armbruster# false). Silently ignored with server: false. This use is 264*a937b6aaSMarkus Armbruster# deprecated. 265*a937b6aaSMarkus Armbruster# 266dbeee392SMarkus Armbruster# @nodelay: set TCP_NODELAY socket option (default: false) 267*a937b6aaSMarkus Armbruster# 268*a937b6aaSMarkus Armbruster# @telnet: enable telnet protocol on server sockets (default: false) 269*a937b6aaSMarkus Armbruster# 270*a937b6aaSMarkus Armbruster# @tn3270: enable tn3270 protocol on server sockets (default: false) 271*a937b6aaSMarkus Armbruster# (Since: 2.10) 272*a937b6aaSMarkus Armbruster# 273*a937b6aaSMarkus Armbruster# @websocket: enable websocket protocol on server sockets 274*a937b6aaSMarkus Armbruster# (default: false) (Since: 3.1) 275*a937b6aaSMarkus Armbruster# 276*a937b6aaSMarkus Armbruster# @reconnect: For a client socket, if a socket is disconnected, then 277*a937b6aaSMarkus Armbruster# attempt a reconnect after the given number of seconds. Setting 278*a937b6aaSMarkus 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 301*a937b6aaSMarkus 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# 329*a937b6aaSMarkus Armbruster# @signal: Allow signals (such as SIGINT triggered by ^C) be delivered 330*a937b6aaSMarkus 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 386*a937b6aaSMarkus Armbruster# 387dbeee392SMarkus Armbruster# @height: console height, in pixels 388*a937b6aaSMarkus Armbruster# 389dbeee392SMarkus Armbruster# @cols: console width, in chars 390*a937b6aaSMarkus Armbruster# 391dbeee392SMarkus Armbruster# @rows: console height, in chars 392dbeee392SMarkus Armbruster# 393dbeee392SMarkus Armbruster# Since: 1.5 394dbeee392SMarkus Armbruster## 395b0ddeba2SMarc-André Lureau{ 'struct': 'ChardevVC', 396b0ddeba2SMarc-André Lureau 'data': { '*width': 'int', 397dbeee392SMarkus Armbruster '*height': 'int', 398dbeee392SMarkus Armbruster '*cols': 'int', 399dbeee392SMarkus Armbruster '*rows': 'int' }, 400dbeee392SMarkus Armbruster 'base': 'ChardevCommon' } 401dbeee392SMarkus Armbruster 402dbeee392SMarkus Armbruster## 403dbeee392SMarkus Armbruster# @ChardevRingbuf: 404dbeee392SMarkus Armbruster# 405dbeee392SMarkus Armbruster# Configuration info for ring buffer chardevs. 406dbeee392SMarkus Armbruster# 407dbeee392SMarkus Armbruster# @size: ring buffer size, must be power of two, default is 65536 408dbeee392SMarkus Armbruster# 409dbeee392SMarkus Armbruster# Since: 1.5 410dbeee392SMarkus Armbruster## 411b0ddeba2SMarc-André Lureau{ 'struct': 'ChardevRingbuf', 412b0ddeba2SMarc-André Lureau 'data': { '*size': 'int' }, 413dbeee392SMarkus Armbruster 'base': 'ChardevCommon' } 414dbeee392SMarkus Armbruster 415dbeee392SMarkus Armbruster## 416de74a22cSGerd Hoffmann# @ChardevQemuVDAgent: 417de74a22cSGerd Hoffmann# 418de74a22cSGerd Hoffmann# Configuration info for qemu vdagent implementation. 419de74a22cSGerd Hoffmann# 42056081919SGerd Hoffmann# @mouse: enable/disable mouse, default is enabled. 421*a937b6aaSMarkus Armbruster# 422f0349f4dSGerd Hoffmann# @clipboard: enable/disable clipboard, default is disabled. 42356081919SGerd Hoffmann# 424de74a22cSGerd Hoffmann# Since: 6.1 425de74a22cSGerd Hoffmann## 426de74a22cSGerd Hoffmann{ 'struct': 'ChardevQemuVDAgent', 427f0349f4dSGerd Hoffmann 'data': { '*mouse': 'bool', 428f0349f4dSGerd Hoffmann '*clipboard': 'bool' }, 429de74a22cSGerd Hoffmann 'base': 'ChardevCommon', 4308a9f1e1dSMarc-André Lureau 'if': 'CONFIG_SPICE_PROTOCOL' } 431de74a22cSGerd Hoffmann 432de74a22cSGerd Hoffmann## 4333218c0e9SMarkus Armbruster# @ChardevBackendKind: 4343218c0e9SMarkus Armbruster# 4353218c0e9SMarkus Armbruster# @pipe: Since 1.5 436*a937b6aaSMarkus Armbruster# 4373218c0e9SMarkus Armbruster# @udp: Since 1.5 438*a937b6aaSMarkus Armbruster# 4393218c0e9SMarkus Armbruster# @mux: Since 1.5 440*a937b6aaSMarkus Armbruster# 4413218c0e9SMarkus Armbruster# @msmouse: Since 1.5 442*a937b6aaSMarkus Armbruster# 4433218c0e9SMarkus Armbruster# @wctablet: Since 2.9 444*a937b6aaSMarkus Armbruster# 4453218c0e9SMarkus Armbruster# @braille: Since 1.5 446*a937b6aaSMarkus Armbruster# 4473218c0e9SMarkus Armbruster# @testdev: Since 2.2 448*a937b6aaSMarkus Armbruster# 4493218c0e9SMarkus Armbruster# @stdio: Since 1.5 450*a937b6aaSMarkus Armbruster# 4513218c0e9SMarkus Armbruster# @console: Since 1.5 452*a937b6aaSMarkus Armbruster# 4533218c0e9SMarkus Armbruster# @spicevmc: Since 1.5 454*a937b6aaSMarkus Armbruster# 4553218c0e9SMarkus Armbruster# @spiceport: Since 1.5 456*a937b6aaSMarkus Armbruster# 4573218c0e9SMarkus Armbruster# @qemu-vdagent: Since 6.1 458*a937b6aaSMarkus Armbruster# 4593e301c8dSMarc-André Lureau# @dbus: Since 7.0 460*a937b6aaSMarkus Armbruster# 4613218c0e9SMarkus Armbruster# @vc: v1.5 462*a937b6aaSMarkus Armbruster# 4633218c0e9SMarkus Armbruster# @ringbuf: Since 1.6 464*a937b6aaSMarkus Armbruster# 4653218c0e9SMarkus Armbruster# @memory: Since 1.5 4663218c0e9SMarkus Armbruster# 4673218c0e9SMarkus Armbruster# Since: 1.4 4683218c0e9SMarkus Armbruster## 4693218c0e9SMarkus Armbruster{ 'enum': 'ChardevBackendKind', 4703218c0e9SMarkus Armbruster 'data': [ 'file', 4713218c0e9SMarkus Armbruster 'serial', 4723218c0e9SMarkus Armbruster 'parallel', 4733218c0e9SMarkus Armbruster 'pipe', 4743218c0e9SMarkus Armbruster 'socket', 4753218c0e9SMarkus Armbruster 'udp', 4763218c0e9SMarkus Armbruster 'pty', 4773218c0e9SMarkus Armbruster 'null', 4783218c0e9SMarkus Armbruster 'mux', 4793218c0e9SMarkus Armbruster 'msmouse', 4803218c0e9SMarkus Armbruster 'wctablet', 4813218c0e9SMarkus Armbruster 'braille', 4823218c0e9SMarkus Armbruster 'testdev', 4833218c0e9SMarkus Armbruster 'stdio', 4843218c0e9SMarkus Armbruster 'console', 4853218c0e9SMarkus Armbruster { 'name': 'spicevmc', 'if': 'CONFIG_SPICE' }, 4863218c0e9SMarkus Armbruster { 'name': 'spiceport', 'if': 'CONFIG_SPICE' }, 4873218c0e9SMarkus Armbruster { 'name': 'qemu-vdagent', 'if': 'CONFIG_SPICE_PROTOCOL' }, 4883e301c8dSMarc-André Lureau { 'name': 'dbus', 'if': 'CONFIG_DBUS_DISPLAY' }, 4893218c0e9SMarkus Armbruster 'vc', 4903218c0e9SMarkus Armbruster 'ringbuf', 4913218c0e9SMarkus Armbruster # next one is just for compatibility 4923218c0e9SMarkus Armbruster 'memory' ] } 4933218c0e9SMarkus Armbruster 4943218c0e9SMarkus Armbruster## 4953218c0e9SMarkus Armbruster# @ChardevFileWrapper: 4963218c0e9SMarkus Armbruster# 4973218c0e9SMarkus Armbruster# Since: 1.4 4983218c0e9SMarkus Armbruster## 4993218c0e9SMarkus Armbruster{ 'struct': 'ChardevFileWrapper', 5003218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevFile' } } 5013218c0e9SMarkus Armbruster 5023218c0e9SMarkus Armbruster## 5033218c0e9SMarkus Armbruster# @ChardevHostdevWrapper: 5043218c0e9SMarkus Armbruster# 5053218c0e9SMarkus Armbruster# Since: 1.4 5063218c0e9SMarkus Armbruster## 5073218c0e9SMarkus Armbruster{ 'struct': 'ChardevHostdevWrapper', 5083218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevHostdev' } } 5093218c0e9SMarkus Armbruster 5103218c0e9SMarkus Armbruster## 5113218c0e9SMarkus Armbruster# @ChardevSocketWrapper: 5123218c0e9SMarkus Armbruster# 5133218c0e9SMarkus Armbruster# Since: 1.4 5143218c0e9SMarkus Armbruster## 5153218c0e9SMarkus Armbruster{ 'struct': 'ChardevSocketWrapper', 5163218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevSocket' } } 5173218c0e9SMarkus Armbruster 5183218c0e9SMarkus Armbruster## 5193218c0e9SMarkus Armbruster# @ChardevUdpWrapper: 5203218c0e9SMarkus Armbruster# 5213218c0e9SMarkus Armbruster# Since: 1.5 5223218c0e9SMarkus Armbruster## 5233218c0e9SMarkus Armbruster{ 'struct': 'ChardevUdpWrapper', 5243218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevUdp' } } 5253218c0e9SMarkus Armbruster 5263218c0e9SMarkus Armbruster## 5273218c0e9SMarkus Armbruster# @ChardevCommonWrapper: 5283218c0e9SMarkus Armbruster# 5293218c0e9SMarkus Armbruster# Since: 2.6 5303218c0e9SMarkus Armbruster## 5313218c0e9SMarkus Armbruster{ 'struct': 'ChardevCommonWrapper', 5323218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevCommon' } } 5333218c0e9SMarkus Armbruster 5343218c0e9SMarkus Armbruster## 5353218c0e9SMarkus Armbruster# @ChardevMuxWrapper: 5363218c0e9SMarkus Armbruster# 5373218c0e9SMarkus Armbruster# Since: 1.5 5383218c0e9SMarkus Armbruster## 5393218c0e9SMarkus Armbruster{ 'struct': 'ChardevMuxWrapper', 5403218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevMux' } } 5413218c0e9SMarkus Armbruster 5423218c0e9SMarkus Armbruster## 5433218c0e9SMarkus Armbruster# @ChardevStdioWrapper: 5443218c0e9SMarkus Armbruster# 5453218c0e9SMarkus Armbruster# Since: 1.5 5463218c0e9SMarkus Armbruster## 5473218c0e9SMarkus Armbruster{ 'struct': 'ChardevStdioWrapper', 5483218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevStdio' } } 5493218c0e9SMarkus Armbruster 5503218c0e9SMarkus Armbruster## 5513218c0e9SMarkus Armbruster# @ChardevSpiceChannelWrapper: 5523218c0e9SMarkus Armbruster# 5533218c0e9SMarkus Armbruster# Since: 1.5 5543218c0e9SMarkus Armbruster## 5553218c0e9SMarkus Armbruster{ 'struct': 'ChardevSpiceChannelWrapper', 5563218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevSpiceChannel' }, 5573218c0e9SMarkus Armbruster 'if': 'CONFIG_SPICE' } 5583218c0e9SMarkus Armbruster 5593218c0e9SMarkus Armbruster## 5603218c0e9SMarkus Armbruster# @ChardevSpicePortWrapper: 5613218c0e9SMarkus Armbruster# 5623218c0e9SMarkus Armbruster# Since: 1.5 5633218c0e9SMarkus Armbruster## 5643218c0e9SMarkus Armbruster{ 'struct': 'ChardevSpicePortWrapper', 5653218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevSpicePort' }, 5663218c0e9SMarkus Armbruster 'if': 'CONFIG_SPICE' } 5673218c0e9SMarkus Armbruster 5683218c0e9SMarkus Armbruster## 5693218c0e9SMarkus Armbruster# @ChardevQemuVDAgentWrapper: 5703218c0e9SMarkus Armbruster# 5713218c0e9SMarkus Armbruster# Since: 6.1 5723218c0e9SMarkus Armbruster## 5733218c0e9SMarkus Armbruster{ 'struct': 'ChardevQemuVDAgentWrapper', 5743218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevQemuVDAgent' }, 5753218c0e9SMarkus Armbruster 'if': 'CONFIG_SPICE_PROTOCOL' } 5763218c0e9SMarkus Armbruster 5773218c0e9SMarkus Armbruster## 5783e301c8dSMarc-André Lureau# @ChardevDBusWrapper: 5793e301c8dSMarc-André Lureau# 5803e301c8dSMarc-André Lureau# Since: 7.0 5813e301c8dSMarc-André Lureau## 5823e301c8dSMarc-André Lureau{ 'struct': 'ChardevDBusWrapper', 5833e301c8dSMarc-André Lureau 'data': { 'data': 'ChardevDBus' }, 5843e301c8dSMarc-André Lureau 'if': 'CONFIG_DBUS_DISPLAY' } 5853e301c8dSMarc-André Lureau 5863e301c8dSMarc-André Lureau## 5873218c0e9SMarkus Armbruster# @ChardevVCWrapper: 5883218c0e9SMarkus Armbruster# 5893218c0e9SMarkus Armbruster# Since: 1.5 5903218c0e9SMarkus Armbruster## 5913218c0e9SMarkus Armbruster{ 'struct': 'ChardevVCWrapper', 5923218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevVC' } } 5933218c0e9SMarkus Armbruster 5943218c0e9SMarkus Armbruster## 5953218c0e9SMarkus Armbruster# @ChardevRingbufWrapper: 5963218c0e9SMarkus Armbruster# 5973218c0e9SMarkus Armbruster# Since: 1.5 5983218c0e9SMarkus Armbruster## 5993218c0e9SMarkus Armbruster{ 'struct': 'ChardevRingbufWrapper', 6003218c0e9SMarkus Armbruster 'data': { 'data': 'ChardevRingbuf' } } 6013218c0e9SMarkus Armbruster 6023218c0e9SMarkus Armbruster## 603dbeee392SMarkus Armbruster# @ChardevBackend: 604dbeee392SMarkus Armbruster# 605dbeee392SMarkus Armbruster# Configuration info for the new chardev backend. 606dbeee392SMarkus Armbruster# 6073218c0e9SMarkus Armbruster# Since: 1.4 608dbeee392SMarkus Armbruster## 609b0ddeba2SMarc-André Lureau{ 'union': 'ChardevBackend', 6103218c0e9SMarkus Armbruster 'base': { 'type': 'ChardevBackendKind' }, 6113218c0e9SMarkus Armbruster 'discriminator': 'type', 6123218c0e9SMarkus Armbruster 'data': { 'file': 'ChardevFileWrapper', 6133218c0e9SMarkus Armbruster 'serial': 'ChardevHostdevWrapper', 6143218c0e9SMarkus Armbruster 'parallel': 'ChardevHostdevWrapper', 6153218c0e9SMarkus Armbruster 'pipe': 'ChardevHostdevWrapper', 6163218c0e9SMarkus Armbruster 'socket': 'ChardevSocketWrapper', 6173218c0e9SMarkus Armbruster 'udp': 'ChardevUdpWrapper', 6183218c0e9SMarkus Armbruster 'pty': 'ChardevCommonWrapper', 6193218c0e9SMarkus Armbruster 'null': 'ChardevCommonWrapper', 6203218c0e9SMarkus Armbruster 'mux': 'ChardevMuxWrapper', 6213218c0e9SMarkus Armbruster 'msmouse': 'ChardevCommonWrapper', 6223218c0e9SMarkus Armbruster 'wctablet': 'ChardevCommonWrapper', 6233218c0e9SMarkus Armbruster 'braille': 'ChardevCommonWrapper', 6243218c0e9SMarkus Armbruster 'testdev': 'ChardevCommonWrapper', 6253218c0e9SMarkus Armbruster 'stdio': 'ChardevStdioWrapper', 6263218c0e9SMarkus Armbruster 'console': 'ChardevCommonWrapper', 6273218c0e9SMarkus Armbruster 'spicevmc': { 'type': 'ChardevSpiceChannelWrapper', 6288a9f1e1dSMarc-André Lureau 'if': 'CONFIG_SPICE' }, 6293218c0e9SMarkus Armbruster 'spiceport': { 'type': 'ChardevSpicePortWrapper', 6308a9f1e1dSMarc-André Lureau 'if': 'CONFIG_SPICE' }, 6313218c0e9SMarkus Armbruster 'qemu-vdagent': { 'type': 'ChardevQemuVDAgentWrapper', 6328a9f1e1dSMarc-André Lureau 'if': 'CONFIG_SPICE_PROTOCOL' }, 6333e301c8dSMarc-André Lureau 'dbus': { 'type': 'ChardevDBusWrapper', 6343e301c8dSMarc-André Lureau 'if': 'CONFIG_DBUS_DISPLAY' }, 6353218c0e9SMarkus Armbruster 'vc': 'ChardevVCWrapper', 6363218c0e9SMarkus Armbruster 'ringbuf': 'ChardevRingbufWrapper', 637dbeee392SMarkus Armbruster # next one is just for compatibility 6383218c0e9SMarkus Armbruster 'memory': 'ChardevRingbufWrapper' } } 639dbeee392SMarkus Armbruster 640dbeee392SMarkus Armbruster## 641dbeee392SMarkus Armbruster# @ChardevReturn: 642dbeee392SMarkus Armbruster# 643dbeee392SMarkus Armbruster# Return info about the chardev backend just created. 644dbeee392SMarkus Armbruster# 645*a937b6aaSMarkus Armbruster# @pty: name of the slave pseudoterminal device, present if and only 646*a937b6aaSMarkus Armbruster# if a chardev of type 'pty' was created 647dbeee392SMarkus Armbruster# 648dbeee392SMarkus Armbruster# Since: 1.4 649dbeee392SMarkus Armbruster## 650b0ddeba2SMarc-André Lureau{ 'struct' : 'ChardevReturn', 651b0ddeba2SMarc-André Lureau 'data': { '*pty': 'str' } } 652dbeee392SMarkus Armbruster 653dbeee392SMarkus Armbruster## 654dbeee392SMarkus Armbruster# @chardev-add: 655dbeee392SMarkus Armbruster# 656dbeee392SMarkus Armbruster# Add a character device backend 657dbeee392SMarkus Armbruster# 658dbeee392SMarkus Armbruster# @id: the chardev's ID, must be unique 659*a937b6aaSMarkus Armbruster# 660dbeee392SMarkus Armbruster# @backend: backend type and parameters 661dbeee392SMarkus Armbruster# 662dbeee392SMarkus Armbruster# Returns: ChardevReturn. 663dbeee392SMarkus Armbruster# 664dbeee392SMarkus Armbruster# Since: 1.4 665dbeee392SMarkus Armbruster# 66637fa48a4SMarkus Armbruster# Examples: 667dbeee392SMarkus Armbruster# 668dbeee392SMarkus Armbruster# -> { "execute" : "chardev-add", 669dbeee392SMarkus Armbruster# "arguments" : { "id" : "foo", 670dbeee392SMarkus Armbruster# "backend" : { "type" : "null", "data" : {} } } } 671dbeee392SMarkus Armbruster# <- { "return": {} } 672dbeee392SMarkus Armbruster# 673dbeee392SMarkus Armbruster# -> { "execute" : "chardev-add", 674dbeee392SMarkus Armbruster# "arguments" : { "id" : "bar", 675dbeee392SMarkus Armbruster# "backend" : { "type" : "file", 676dbeee392SMarkus Armbruster# "data" : { "out" : "/tmp/bar.log" } } } } 677dbeee392SMarkus Armbruster# <- { "return": {} } 678dbeee392SMarkus Armbruster# 679dbeee392SMarkus Armbruster# -> { "execute" : "chardev-add", 680dbeee392SMarkus Armbruster# "arguments" : { "id" : "baz", 681dbeee392SMarkus Armbruster# "backend" : { "type" : "pty", "data" : {} } } } 682dbeee392SMarkus Armbruster# <- { "return": { "pty" : "/dev/pty/42" } } 683dbeee392SMarkus Armbruster## 684b0ddeba2SMarc-André Lureau{ 'command': 'chardev-add', 685b0ddeba2SMarc-André Lureau 'data': { 'id': 'str', 686dbeee392SMarkus Armbruster 'backend': 'ChardevBackend' }, 687dbeee392SMarkus Armbruster 'returns': 'ChardevReturn' } 688dbeee392SMarkus Armbruster 689dbeee392SMarkus Armbruster## 690dbeee392SMarkus Armbruster# @chardev-change: 691dbeee392SMarkus Armbruster# 692dbeee392SMarkus Armbruster# Change a character device backend 693dbeee392SMarkus Armbruster# 694dbeee392SMarkus Armbruster# @id: the chardev's ID, must exist 695*a937b6aaSMarkus Armbruster# 696dbeee392SMarkus Armbruster# @backend: new backend type and parameters 697dbeee392SMarkus Armbruster# 698dbeee392SMarkus Armbruster# Returns: ChardevReturn. 699dbeee392SMarkus Armbruster# 700dbeee392SMarkus Armbruster# Since: 2.10 701dbeee392SMarkus Armbruster# 70237fa48a4SMarkus Armbruster# Examples: 703dbeee392SMarkus Armbruster# 704dbeee392SMarkus Armbruster# -> { "execute" : "chardev-change", 705dbeee392SMarkus Armbruster# "arguments" : { "id" : "baz", 706dbeee392SMarkus Armbruster# "backend" : { "type" : "pty", "data" : {} } } } 707dbeee392SMarkus Armbruster# <- { "return": { "pty" : "/dev/pty/42" } } 708dbeee392SMarkus Armbruster# 709dbeee392SMarkus Armbruster# -> {"execute" : "chardev-change", 710dbeee392SMarkus Armbruster# "arguments" : { 711dbeee392SMarkus Armbruster# "id" : "charchannel2", 712dbeee392SMarkus Armbruster# "backend" : { 713dbeee392SMarkus Armbruster# "type" : "socket", 714dbeee392SMarkus Armbruster# "data" : { 715dbeee392SMarkus Armbruster# "addr" : { 716dbeee392SMarkus Armbruster# "type" : "unix" , 717dbeee392SMarkus Armbruster# "data" : { 718dbeee392SMarkus Armbruster# "path" : "/tmp/charchannel2.socket" 719dbeee392SMarkus Armbruster# } 720dbeee392SMarkus Armbruster# }, 721dbeee392SMarkus Armbruster# "server" : true, 722dbeee392SMarkus Armbruster# "wait" : false }}}} 723dbeee392SMarkus Armbruster# <- {"return": {}} 724dbeee392SMarkus Armbruster## 725b0ddeba2SMarc-André Lureau{ 'command': 'chardev-change', 726b0ddeba2SMarc-André Lureau 'data': { 'id': 'str', 727dbeee392SMarkus Armbruster 'backend': 'ChardevBackend' }, 728dbeee392SMarkus Armbruster 'returns': 'ChardevReturn' } 729dbeee392SMarkus Armbruster 730dbeee392SMarkus Armbruster## 731dbeee392SMarkus Armbruster# @chardev-remove: 732dbeee392SMarkus Armbruster# 733dbeee392SMarkus Armbruster# Remove a character device backend 734dbeee392SMarkus Armbruster# 735dbeee392SMarkus Armbruster# @id: the chardev's ID, must exist and not be in use 736dbeee392SMarkus Armbruster# 737dbeee392SMarkus Armbruster# Returns: Nothing on success 738dbeee392SMarkus Armbruster# 739dbeee392SMarkus Armbruster# Since: 1.4 740dbeee392SMarkus Armbruster# 741dbeee392SMarkus Armbruster# Example: 742dbeee392SMarkus Armbruster# 743dbeee392SMarkus Armbruster# -> { "execute": "chardev-remove", "arguments": { "id" : "foo" } } 744dbeee392SMarkus Armbruster# <- { "return": {} } 745dbeee392SMarkus Armbruster## 746b0ddeba2SMarc-André Lureau{ 'command': 'chardev-remove', 747b0ddeba2SMarc-André Lureau 'data': { 'id': 'str' } } 748dbeee392SMarkus Armbruster 749dbeee392SMarkus Armbruster## 750dbeee392SMarkus Armbruster# @chardev-send-break: 751dbeee392SMarkus Armbruster# 752dbeee392SMarkus Armbruster# Send a break to a character device 753dbeee392SMarkus Armbruster# 754dbeee392SMarkus Armbruster# @id: the chardev's ID, must exist 755dbeee392SMarkus Armbruster# 756dbeee392SMarkus Armbruster# Returns: Nothing on success 757dbeee392SMarkus Armbruster# 758dbeee392SMarkus Armbruster# Since: 2.10 759dbeee392SMarkus Armbruster# 760dbeee392SMarkus Armbruster# Example: 761dbeee392SMarkus Armbruster# 762dbeee392SMarkus Armbruster# -> { "execute": "chardev-send-break", "arguments": { "id" : "foo" } } 763dbeee392SMarkus Armbruster# <- { "return": {} } 764dbeee392SMarkus Armbruster## 765b0ddeba2SMarc-André Lureau{ 'command': 'chardev-send-break', 766b0ddeba2SMarc-André Lureau 'data': { 'id': 'str' } } 767dbeee392SMarkus Armbruster 768dbeee392SMarkus Armbruster## 769dbeee392SMarkus Armbruster# @VSERPORT_CHANGE: 770dbeee392SMarkus Armbruster# 771dbeee392SMarkus Armbruster# Emitted when the guest opens or closes a virtio-serial port. 772dbeee392SMarkus Armbruster# 773dbeee392SMarkus Armbruster# @id: device identifier of the virtio-serial port 774dbeee392SMarkus Armbruster# 775dbeee392SMarkus Armbruster# @open: true if the guest has opened the virtio-serial port 776dbeee392SMarkus Armbruster# 777382bd1cbSMarkus Armbruster# Note: This event is rate-limited. 778382bd1cbSMarkus Armbruster# 779dbeee392SMarkus Armbruster# Since: 2.1 780dbeee392SMarkus Armbruster# 781dbeee392SMarkus Armbruster# Example: 782dbeee392SMarkus Armbruster# 783dbeee392SMarkus Armbruster# <- { "event": "VSERPORT_CHANGE", 784dbeee392SMarkus Armbruster# "data": { "id": "channel0", "open": true }, 785dbeee392SMarkus Armbruster# "timestamp": { "seconds": 1401385907, "microseconds": 422329 } } 786dbeee392SMarkus Armbruster## 787dbeee392SMarkus Armbruster{ 'event': 'VSERPORT_CHANGE', 788b0ddeba2SMarc-André Lureau 'data': { 'id': 'str', 789b0ddeba2SMarc-André Lureau 'open': 'bool' } } 790