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