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