1# -*- Mode: Python -*- 2# vim: filetype=python 3# 4 5## 6# = Character devices 7## 8 9{ 'include': 'sockets.json' } 10 11## 12# @ChardevInfo: 13# 14# Information about a character device. 15# 16# @label: the label of the character device 17# 18# @filename: the filename of the character device 19# 20# @frontend-open: shows whether the frontend device attached to this 21# backend (e.g. with the chardev=... option) is in open or closed 22# state (since 2.1) 23# 24# .. note:: @filename is encoded using the QEMU command line character 25# device encoding. See the QEMU man page for details. 26# 27# Since: 0.14 28## 29{ 'struct': 'ChardevInfo', 30 'data': { 'label': 'str', 31 'filename': 'str', 32 'frontend-open': 'bool' } } 33 34## 35# @query-chardev: 36# 37# Returns information about current character devices. 38# 39# Returns: a list of @ChardevInfo 40# 41# Since: 0.14 42# 43# .. qmp-example:: 44# 45# -> { "execute": "query-chardev" } 46# <- { 47# "return": [ 48# { 49# "label": "charchannel0", 50# "filename": "unix:/var/lib/libvirt/qemu/seabios.rhel6.agent,server=on", 51# "frontend-open": false 52# }, 53# { 54# "label": "charmonitor", 55# "filename": "unix:/var/lib/libvirt/qemu/seabios.rhel6.monitor,server=on", 56# "frontend-open": true 57# }, 58# { 59# "label": "charserial0", 60# "filename": "pty:/dev/pts/2", 61# "frontend-open": true 62# } 63# ] 64# } 65## 66{ 'command': 'query-chardev', 'returns': ['ChardevInfo'], 67 'allow-preconfig': true } 68 69## 70# @ChardevBackendInfo: 71# 72# Information about a character device backend 73# 74# @name: The backend name 75# 76# Since: 2.0 77## 78{ 'struct': 'ChardevBackendInfo', 'data': {'name': 'str'} } 79 80## 81# @query-chardev-backends: 82# 83# Returns information about character device backends. 84# 85# Returns: a list of @ChardevBackendInfo 86# 87# Since: 2.0 88# 89# .. qmp-example:: 90# 91# -> { "execute": "query-chardev-backends" } 92# <- { 93# "return":[ 94# { 95# "name":"udp" 96# }, 97# { 98# "name":"tcp" 99# }, 100# { 101# "name":"unix" 102# }, 103# { 104# "name":"spiceport" 105# } 106# ] 107# } 108## 109{ 'command': 'query-chardev-backends', 'returns': ['ChardevBackendInfo'] } 110 111## 112# @DataFormat: 113# 114# An enumeration of data format. 115# 116# @utf8: Data is a UTF-8 string (RFC 3629) 117# 118# @base64: Data is Base64 encoded binary (RFC 3548) 119# 120# Since: 1.4 121## 122{ 'enum': 'DataFormat', 123 'data': [ 'utf8', 'base64' ] } 124 125## 126# @ringbuf-write: 127# 128# Write to a ring buffer character device. 129# 130# @device: the ring buffer character device name 131# 132# @data: data to write 133# 134# @format: data encoding (default 'utf8'). 135# 136# - base64: data must be base64 encoded text. Its binary decoding 137# gets written. 138# - utf8: data's UTF-8 encoding is written 139# - data itself is always Unicode regardless of format, like any 140# other string. 141# 142# Since: 1.4 143# 144# .. qmp-example:: 145# 146# -> { "execute": "ringbuf-write", 147# "arguments": { "device": "foo", 148# "data": "abcdefgh", 149# "format": "utf8" } } 150# <- { "return": {} } 151## 152{ 'command': 'ringbuf-write', 153 'data': { 'device': 'str', 154 'data': 'str', 155 '*format': 'DataFormat'} } 156 157## 158# @ringbuf-read: 159# 160# Read from a ring buffer character device. 161# 162# @device: the ring buffer character device name 163# 164# @size: how many bytes to read at most 165# 166# @format: data encoding (default 'utf8'). 167# 168# - base64: the data read is returned in base64 encoding. 169# - utf8: the data read is interpreted as UTF-8. 170# Bug: can screw up when the buffer contains invalid UTF-8 171# sequences, NUL characters, after the ring buffer lost data, 172# and when reading stops because the size limit is reached. 173# - The return value is always Unicode regardless of format, like 174# any other string. 175# 176# Returns: data read from the device 177# 178# Since: 1.4 179# 180# .. qmp-example:: 181# 182# -> { "execute": "ringbuf-read", 183# "arguments": { "device": "foo", 184# "size": 1000, 185# "format": "utf8" } } 186# <- { "return": "abcdefgh" } 187## 188{ 'command': 'ringbuf-read', 189 'data': {'device': 'str', 'size': 'int', '*format': 'DataFormat'}, 190 'returns': 'str' } 191 192## 193# @ChardevCommon: 194# 195# Configuration shared across all chardev backends 196# 197# @logfile: The name of a logfile to save output 198# 199# @logappend: true to append instead of truncate (default to false to 200# truncate) 201# 202# Since: 2.6 203## 204{ 'struct': 'ChardevCommon', 205 'data': { '*logfile': 'str', 206 '*logappend': 'bool' } } 207 208## 209# @ChardevFile: 210# 211# Configuration info for file chardevs. 212# 213# @in: The name of the input file 214# 215# @out: The name of the output file 216# 217# @append: Open the file in append mode (default false to truncate) 218# (Since 2.6) 219# 220# Since: 1.4 221## 222{ 'struct': 'ChardevFile', 223 'data': { '*in': 'str', 224 'out': 'str', 225 '*append': 'bool' }, 226 'base': 'ChardevCommon' } 227 228## 229# @ChardevHostdev: 230# 231# Configuration info for device and pipe chardevs. 232# 233# @device: The name of the special file for the device, i.e. 234# /dev/ttyS0 on Unix or COM1: on Windows 235# 236# Since: 1.4 237## 238{ 'struct': 'ChardevHostdev', 239 'data': { 'device': 'str' }, 240 'base': 'ChardevCommon' } 241 242## 243# @ChardevSocket: 244# 245# Configuration info for (stream) socket chardevs. 246# 247# @addr: socket address to listen on (server=true) or connect to 248# (server=false) 249# 250# @tls-creds: the ID of the TLS credentials object (since 2.6) 251# 252# @tls-authz: the ID of the QAuthZ authorization object against which 253# the client's x509 distinguished name will be validated. This 254# object is only resolved at time of use, so can be deleted and 255# recreated on the fly while the chardev server is active. If 256# missing, it will default to denying access (since 4.0) 257# 258# @server: create server socket (default: true) 259# 260# @wait: wait for incoming connection on server sockets (default: 261# false). Silently ignored with server: false. This use is 262# deprecated. 263# 264# @nodelay: set TCP_NODELAY socket option (default: false) 265# 266# @telnet: enable telnet protocol on server sockets (default: false) 267# 268# @tn3270: enable tn3270 protocol on server sockets (default: false) 269# (Since: 2.10) 270# 271# @websocket: enable websocket protocol on server sockets 272# (default: false) (Since: 3.1) 273# 274# @reconnect: For a client socket, if a socket is disconnected, then 275# attempt a reconnect after the given number of seconds. Setting 276# this to zero disables this function. The use of this member is 277# deprecated, use @reconnect-ms instead. (default: 0) (Since: 2.2) 278# 279# @reconnect-ms: For a client socket, if a socket is disconnected, 280# then attempt a reconnect after the given number of milliseconds. 281# Setting this to zero disables this function. This member is 282# mutually exclusive with @reconnect. 283# (default: 0) (Since: 9.2) 284# 285# Features: 286# 287# @deprecated: Member @reconnect is deprecated. Use @reconnect-ms 288# instead. 289# 290# Since: 1.4 291## 292{ 'struct': 'ChardevSocket', 293 'data': { 'addr': 'SocketAddressLegacy', 294 '*tls-creds': 'str', 295 '*tls-authz' : 'str', 296 '*server': 'bool', 297 '*wait': 'bool', 298 '*nodelay': 'bool', 299 '*telnet': 'bool', 300 '*tn3270': 'bool', 301 '*websocket': 'bool', 302 '*reconnect': { 'type': 'int', 'features': [ 'deprecated' ] }, 303 '*reconnect-ms': 'int' }, 304 'base': 'ChardevCommon' } 305 306## 307# @ChardevUdp: 308# 309# Configuration info for datagram socket chardevs. 310# 311# @remote: remote address 312# 313# @local: local address 314# 315# Since: 1.5 316## 317{ 'struct': 'ChardevUdp', 318 'data': { 'remote': 'SocketAddressLegacy', 319 '*local': 'SocketAddressLegacy' }, 320 'base': 'ChardevCommon' } 321 322## 323# @ChardevMux: 324# 325# Configuration info for mux chardevs. 326# 327# @chardev: name of the base chardev. 328# 329# Since: 1.5 330## 331{ 'struct': 'ChardevMux', 332 'data': { 'chardev': 'str' }, 333 'base': 'ChardevCommon' } 334 335## 336# @ChardevHub: 337# 338# Configuration info for hub chardevs. 339# 340# @chardevs: List of chardev IDs, which should be added to this hub 341# 342# Since: 10.0 343## 344{ 'struct': 'ChardevHub', 345 'data': { 'chardevs': ['str'] }, 346 'base': 'ChardevCommon' } 347 348## 349# @ChardevStdio: 350# 351# Configuration info for stdio chardevs. 352# 353# @signal: Allow signals (such as SIGINT triggered by ^C) be delivered 354# to qemu. Default: true. 355# 356# Since: 1.5 357## 358{ 'struct': 'ChardevStdio', 359 'data': { '*signal': 'bool' }, 360 'base': 'ChardevCommon' } 361 362## 363# @ChardevSpiceChannel: 364# 365# Configuration info for spice vm channel chardevs. 366# 367# @type: kind of channel (for example vdagent). 368# 369# Since: 1.5 370## 371{ 'struct': 'ChardevSpiceChannel', 372 'data': { 'type': 'str' }, 373 'base': 'ChardevCommon', 374 'if': 'CONFIG_SPICE' } 375 376## 377# @ChardevSpicePort: 378# 379# Configuration info for spice port chardevs. 380# 381# @fqdn: name of the channel (see docs/spice-port-fqdn.txt) 382# 383# Since: 1.5 384## 385{ 'struct': 'ChardevSpicePort', 386 'data': { 'fqdn': 'str' }, 387 'base': 'ChardevCommon', 388 'if': 'CONFIG_SPICE' } 389 390## 391# @ChardevDBus: 392# 393# Configuration info for DBus chardevs. 394# 395# @name: name of the channel (following docs/spice-port-fqdn.txt) 396# 397# Since: 7.0 398## 399{ 'struct': 'ChardevDBus', 400 'data': { 'name': 'str' }, 401 'base': 'ChardevCommon', 402 'if': 'CONFIG_DBUS_DISPLAY' } 403 404## 405# @ChardevVC: 406# 407# Configuration info for virtual console chardevs. 408# 409# @width: console width, in pixels 410# 411# @height: console height, in pixels 412# 413# @cols: console width, in chars 414# 415# @rows: console height, in chars 416# 417# .. note:: The options are only effective when the VNC or SDL 418# graphical display backend is active. They are ignored with the 419# GTK, Spice, VNC and D-Bus display backends. 420# 421# Since: 1.5 422## 423{ 'struct': 'ChardevVC', 424 'data': { '*width': 'int', 425 '*height': 'int', 426 '*cols': 'int', 427 '*rows': 'int' }, 428 'base': 'ChardevCommon' } 429 430## 431# @ChardevRingbuf: 432# 433# Configuration info for ring buffer chardevs. 434# 435# @size: ring buffer size, must be power of two, default is 65536 436# 437# Since: 1.5 438## 439{ 'struct': 'ChardevRingbuf', 440 'data': { '*size': 'int' }, 441 'base': 'ChardevCommon' } 442 443## 444# @ChardevQemuVDAgent: 445# 446# Configuration info for qemu vdagent implementation. 447# 448# @mouse: enable/disable mouse, default is enabled. 449# 450# @clipboard: enable/disable clipboard, default is disabled. 451# 452# Since: 6.1 453## 454{ 'struct': 'ChardevQemuVDAgent', 455 'data': { '*mouse': 'bool', 456 '*clipboard': 'bool' }, 457 'base': 'ChardevCommon', 458 'if': 'CONFIG_SPICE_PROTOCOL' } 459 460## 461# @ChardevPty: 462# 463# Configuration info for pty implementation. 464# 465# @path: optional path to create a symbolic link that points to the 466# allocated PTY 467# 468# Since: 9.2 469## 470{ 'struct': 'ChardevPty', 471 'data': { '*path': 'str' }, 472 'base': 'ChardevCommon' } 473 474## 475# @ChardevBackendKind: 476# 477# @file: regular files 478# 479# @serial: serial host device 480# 481# @parallel: parallel host device 482# 483# @pipe: pipes (since 1.5) 484# 485# @socket: stream socket 486# 487# @udp: datagram socket (since 1.5) 488# 489# @pty: pseudo-terminal 490# 491# @null: provides no input, throws away output 492# 493# @mux: (since 1.5) 494# 495# @hub: (since 10.0) 496# 497# @msmouse: emulated Microsoft serial mouse (since 1.5) 498# 499# @wctablet: emulated Wacom Penpartner serial tablet (since 2.9) 500# 501# @braille: Baum Braille device (since 1.5) 502# 503# @testdev: device for test-suite control (since 2.2) 504# 505# @stdio: standard I/O (since 1.5) 506# 507# @console: Windows console (since 1.5) 508# 509# @spicevmc: spice vm channel (since 1.5) 510# 511# @spiceport: Spice port channel (since 1.5) 512# 513# @qemu-vdagent: Spice vdagent (since 6.1) 514# 515# @dbus: D-Bus channel (since 7.0) 516# 517# @vc: virtual console (since 1.5) 518# 519# @ringbuf: memory ring buffer (since 1.6) 520# 521# @memory: synonym for @ringbuf (since 1.5) 522# 523# Features: 524# 525# @deprecated: Member @memory is deprecated. Use @ringbuf instead. 526# 527# Since: 1.4 528## 529{ 'enum': 'ChardevBackendKind', 530 'data': [ 'file', 531 { 'name': 'serial', 'if': 'HAVE_CHARDEV_SERIAL' }, 532 { 'name': 'parallel', 'if': 'HAVE_CHARDEV_PARALLEL' }, 533 'pipe', 534 'socket', 535 'udp', 536 'pty', 537 'null', 538 'mux', 539 'hub', 540 'msmouse', 541 'wctablet', 542 { 'name': 'braille', 'if': 'CONFIG_BRLAPI' }, 543 'testdev', 544 'stdio', 545 { 'name': 'console', 'if': 'CONFIG_WIN32' }, 546 { 'name': 'spicevmc', 'if': 'CONFIG_SPICE' }, 547 { 'name': 'spiceport', 'if': 'CONFIG_SPICE' }, 548 { 'name': 'qemu-vdagent', 'if': 'CONFIG_SPICE_PROTOCOL' }, 549 { 'name': 'dbus', 'if': 'CONFIG_DBUS_DISPLAY' }, 550 'vc', 551 'ringbuf', 552 { 'name': 'memory', 'features': [ 'deprecated' ] } ] } 553 554## 555# @ChardevFileWrapper: 556# 557# @data: Configuration info for file chardevs 558# 559# Since: 1.4 560## 561{ 'struct': 'ChardevFileWrapper', 562 'data': { 'data': 'ChardevFile' } } 563 564## 565# @ChardevHostdevWrapper: 566# 567# @data: Configuration info for device and pipe chardevs 568# 569# Since: 1.4 570## 571{ 'struct': 'ChardevHostdevWrapper', 572 'data': { 'data': 'ChardevHostdev' } } 573 574## 575# @ChardevSocketWrapper: 576# 577# @data: Configuration info for (stream) socket chardevs 578# 579# Since: 1.4 580## 581{ 'struct': 'ChardevSocketWrapper', 582 'data': { 'data': 'ChardevSocket' } } 583 584## 585# @ChardevUdpWrapper: 586# 587# @data: Configuration info for datagram socket chardevs 588# 589# Since: 1.5 590## 591{ 'struct': 'ChardevUdpWrapper', 592 'data': { 'data': 'ChardevUdp' } } 593 594## 595# @ChardevCommonWrapper: 596# 597# @data: Configuration shared across all chardev backends 598# 599# Since: 2.6 600## 601{ 'struct': 'ChardevCommonWrapper', 602 'data': { 'data': 'ChardevCommon' } } 603 604## 605# @ChardevMuxWrapper: 606# 607# @data: Configuration info for mux chardevs 608# 609# Since: 1.5 610## 611{ 'struct': 'ChardevMuxWrapper', 612 'data': { 'data': 'ChardevMux' } } 613 614## 615# @ChardevHubWrapper: 616# 617# @data: Configuration info for hub chardevs 618# 619# Since: 10.0 620## 621{ 'struct': 'ChardevHubWrapper', 622 'data': { 'data': 'ChardevHub' } } 623 624## 625# @ChardevStdioWrapper: 626# 627# @data: Configuration info for stdio chardevs 628# 629# Since: 1.5 630## 631{ 'struct': 'ChardevStdioWrapper', 632 'data': { 'data': 'ChardevStdio' } } 633 634## 635# @ChardevSpiceChannelWrapper: 636# 637# @data: Configuration info for spice vm channel chardevs 638# 639# Since: 1.5 640## 641{ 'struct': 'ChardevSpiceChannelWrapper', 642 'data': { 'data': 'ChardevSpiceChannel' }, 643 'if': 'CONFIG_SPICE' } 644 645## 646# @ChardevSpicePortWrapper: 647# 648# @data: Configuration info for spice port chardevs 649# 650# Since: 1.5 651## 652{ 'struct': 'ChardevSpicePortWrapper', 653 'data': { 'data': 'ChardevSpicePort' }, 654 'if': 'CONFIG_SPICE' } 655 656## 657# @ChardevQemuVDAgentWrapper: 658# 659# @data: Configuration info for qemu vdagent implementation 660# 661# Since: 6.1 662## 663{ 'struct': 'ChardevQemuVDAgentWrapper', 664 'data': { 'data': 'ChardevQemuVDAgent' }, 665 'if': 'CONFIG_SPICE_PROTOCOL' } 666 667## 668# @ChardevDBusWrapper: 669# 670# @data: Configuration info for DBus chardevs 671# 672# Since: 7.0 673## 674{ 'struct': 'ChardevDBusWrapper', 675 'data': { 'data': 'ChardevDBus' }, 676 'if': 'CONFIG_DBUS_DISPLAY' } 677 678## 679# @ChardevVCWrapper: 680# 681# @data: Configuration info for virtual console chardevs 682# 683# Since: 1.5 684## 685{ 'struct': 'ChardevVCWrapper', 686 'data': { 'data': 'ChardevVC' } } 687 688## 689# @ChardevRingbufWrapper: 690# 691# @data: Configuration info for ring buffer chardevs 692# 693# Since: 1.5 694## 695{ 'struct': 'ChardevRingbufWrapper', 696 'data': { 'data': 'ChardevRingbuf' } } 697 698 699## 700# @ChardevPtyWrapper: 701# 702# @data: Configuration info for pty chardevs 703# 704# Since: 9.2 705## 706{ 'struct': 'ChardevPtyWrapper', 707 'data': { 'data': 'ChardevPty' } } 708 709## 710# @ChardevBackend: 711# 712# Configuration info for the new chardev backend. 713# 714# @type: backend type 715# 716# Since: 1.4 717## 718{ 'union': 'ChardevBackend', 719 'base': { 'type': 'ChardevBackendKind' }, 720 'discriminator': 'type', 721 'data': { 'file': 'ChardevFileWrapper', 722 'serial': { 'type': 'ChardevHostdevWrapper', 723 'if': 'HAVE_CHARDEV_SERIAL' }, 724 'parallel': { 'type': 'ChardevHostdevWrapper', 725 'if': 'HAVE_CHARDEV_PARALLEL' }, 726 'pipe': 'ChardevHostdevWrapper', 727 'socket': 'ChardevSocketWrapper', 728 'udp': 'ChardevUdpWrapper', 729 'pty': 'ChardevPtyWrapper', 730 'null': 'ChardevCommonWrapper', 731 'mux': 'ChardevMuxWrapper', 732 'hub': 'ChardevHubWrapper', 733 'msmouse': 'ChardevCommonWrapper', 734 'wctablet': 'ChardevCommonWrapper', 735 'braille': { 'type': 'ChardevCommonWrapper', 736 'if': 'CONFIG_BRLAPI' }, 737 'testdev': 'ChardevCommonWrapper', 738 'stdio': 'ChardevStdioWrapper', 739 'console': { 'type': 'ChardevCommonWrapper', 740 'if': 'CONFIG_WIN32' }, 741 'spicevmc': { 'type': 'ChardevSpiceChannelWrapper', 742 'if': 'CONFIG_SPICE' }, 743 'spiceport': { 'type': 'ChardevSpicePortWrapper', 744 'if': 'CONFIG_SPICE' }, 745 'qemu-vdagent': { 'type': 'ChardevQemuVDAgentWrapper', 746 'if': 'CONFIG_SPICE_PROTOCOL' }, 747 'dbus': { 'type': 'ChardevDBusWrapper', 748 'if': 'CONFIG_DBUS_DISPLAY' }, 749 'vc': 'ChardevVCWrapper', 750 'ringbuf': 'ChardevRingbufWrapper', 751 'memory': 'ChardevRingbufWrapper' } } 752 753## 754# @ChardevReturn: 755# 756# Return info about the chardev backend just created. 757# 758# @pty: name of the slave pseudoterminal device, present if and only 759# if a chardev of type 'pty' was created 760# 761# Since: 1.4 762## 763{ 'struct' : 'ChardevReturn', 764 'data': { '*pty': 'str' } } 765 766## 767# @chardev-add: 768# 769# Add a character device backend 770# 771# @id: the chardev's ID, must be unique 772# 773# @backend: backend type and parameters 774# 775# Returns: ChardevReturn. 776# 777# Since: 1.4 778# 779# .. qmp-example:: 780# 781# -> { "execute" : "chardev-add", 782# "arguments" : { "id" : "foo", 783# "backend" : { "type" : "null", "data" : {} } } } 784# <- { "return": {} } 785# 786# .. qmp-example:: 787# 788# -> { "execute" : "chardev-add", 789# "arguments" : { "id" : "bar", 790# "backend" : { "type" : "file", 791# "data" : { "out" : "/tmp/bar.log" } } } } 792# <- { "return": {} } 793# 794# .. qmp-example:: 795# 796# -> { "execute" : "chardev-add", 797# "arguments" : { "id" : "baz", 798# "backend" : { "type" : "pty", "data" : {} } } } 799# <- { "return": { "pty" : "/dev/pty/42" } } 800## 801{ 'command': 'chardev-add', 802 'data': { 'id': 'str', 803 'backend': 'ChardevBackend' }, 804 'returns': 'ChardevReturn' } 805 806## 807# @chardev-change: 808# 809# Change a character device backend 810# 811# @id: the chardev's ID, must exist 812# 813# @backend: new backend type and parameters 814# 815# Returns: ChardevReturn. 816# 817# Since: 2.10 818# 819# .. qmp-example:: 820# 821# -> { "execute" : "chardev-change", 822# "arguments" : { "id" : "baz", 823# "backend" : { "type" : "pty", "data" : {} } } } 824# <- { "return": { "pty" : "/dev/pty/42" } } 825# 826# .. qmp-example:: 827# 828# -> {"execute" : "chardev-change", 829# "arguments" : { 830# "id" : "charchannel2", 831# "backend" : { 832# "type" : "socket", 833# "data" : { 834# "addr" : { 835# "type" : "unix" , 836# "data" : { 837# "path" : "/tmp/charchannel2.socket" 838# } 839# }, 840# "server" : true, 841# "wait" : false }}}} 842# <- {"return": {}} 843## 844{ 'command': 'chardev-change', 845 'data': { 'id': 'str', 846 'backend': 'ChardevBackend' }, 847 'returns': 'ChardevReturn' } 848 849## 850# @chardev-remove: 851# 852# Remove a character device backend 853# 854# @id: the chardev's ID, must exist and not be in use 855# 856# Since: 1.4 857# 858# .. qmp-example:: 859# 860# -> { "execute": "chardev-remove", "arguments": { "id" : "foo" } } 861# <- { "return": {} } 862## 863{ 'command': 'chardev-remove', 864 'data': { 'id': 'str' } } 865 866## 867# @chardev-send-break: 868# 869# Send a break to a character device 870# 871# @id: the chardev's ID, must exist 872# 873# Since: 2.10 874# 875# .. qmp-example:: 876# 877# -> { "execute": "chardev-send-break", "arguments": { "id" : "foo" } } 878# <- { "return": {} } 879## 880{ 'command': 'chardev-send-break', 881 'data': { 'id': 'str' } } 882 883## 884# @VSERPORT_CHANGE: 885# 886# Emitted when the guest opens or closes a virtio-serial port. 887# 888# @id: device identifier of the virtio-serial port 889# 890# @open: true if the guest has opened the virtio-serial port 891# 892# .. note:: This event is rate-limited. 893# 894# Since: 2.1 895# 896# .. qmp-example:: 897# 898# <- { "event": "VSERPORT_CHANGE", 899# "data": { "id": "channel0", "open": true }, 900# "timestamp": { "seconds": 1401385907, "microseconds": 422329 } } 901## 902{ 'event': 'VSERPORT_CHANGE', 903 'data': { 'id': 'str', 904 'open': 'bool' } } 905