mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-06 01:03:55 -06:00
chardev/char-hub: implement backend chardev aggregator
This patch implements a new chardev backend `hub` device, which aggregates input from multiple backend devices and forwards it to a single frontend device. Additionally, `hub` device takes the output from the frontend device and sends it back to all the connected backend devices. This allows for seamless interaction between different backend devices and a single frontend interface. The idea of the change is trivial: keep list of backend devices (up to 4), init them on demand and forward data buffer back and forth. The following is QEMU command line example: -chardev pty,path=/tmp/pty,id=pty0 \ -chardev vc,id=vc0 \ -chardev hub,id=hub0,chardevs.0=pty0,chardevs.1=vc0 \ -device virtconsole,chardev=hub0 \ -vnc 0.0.0.0:0 Which creates 2 backend devices: text virtual console (`vc0`) and a pseudo TTY (`pty0`) connected to the single virtio hvc console with the backend aggregator (`hub0`) help. `vc0` renders text to an image, which can be shared over the VNC protocol. `pty0` is a pseudo TTY backend which provides biderectional communication to the virtio hvc console. 'chardevs.N' list syntax is used for the sake of compatibility with the representation of JSON lists in 'key=val' pairs format of the util/keyval.c, despite the fact that modern QAPI way of parsing, namely qobject_input_visitor_new_str(), is not used. Choice of keeping QAPI list syntax may help to smoothly switch to modern parsing in the future. Signed-off-by: Roman Penyaev <r.peniaev@gmail.com> Reviewed-by: "Marc-André Lureau" <marcandre.lureau@redhat.com> Cc: qemu-devel@nongnu.org Message-ID: <20250123085327.965501-3-r.peniaev@gmail.com>
This commit is contained in:
parent
4e059a9d96
commit
b66ed23238
6 changed files with 401 additions and 3 deletions
|
@ -332,6 +332,19 @@
|
|||
'data': { 'chardev': 'str' },
|
||||
'base': 'ChardevCommon' }
|
||||
|
||||
##
|
||||
# @ChardevHub:
|
||||
#
|
||||
# Configuration info for hub chardevs.
|
||||
#
|
||||
# @chardevs: List of chardev IDs, which should be added to this hub
|
||||
#
|
||||
# Since: 10.0
|
||||
##
|
||||
{ 'struct': 'ChardevHub',
|
||||
'data': { 'chardevs': ['str'] },
|
||||
'base': 'ChardevCommon' }
|
||||
|
||||
##
|
||||
# @ChardevStdio:
|
||||
#
|
||||
|
@ -479,6 +492,8 @@
|
|||
#
|
||||
# @mux: (since 1.5)
|
||||
#
|
||||
# @hub: (since 10.0)
|
||||
#
|
||||
# @msmouse: emulated Microsoft serial mouse (since 1.5)
|
||||
#
|
||||
# @wctablet: emulated Wacom Penpartner serial tablet (since 2.9)
|
||||
|
@ -521,6 +536,7 @@
|
|||
'pty',
|
||||
'null',
|
||||
'mux',
|
||||
'hub',
|
||||
'msmouse',
|
||||
'wctablet',
|
||||
{ 'name': 'braille', 'if': 'CONFIG_BRLAPI' },
|
||||
|
@ -595,6 +611,16 @@
|
|||
{ 'struct': 'ChardevMuxWrapper',
|
||||
'data': { 'data': 'ChardevMux' } }
|
||||
|
||||
##
|
||||
# @ChardevHubWrapper:
|
||||
#
|
||||
# @data: Configuration info for hub chardevs
|
||||
#
|
||||
# Since: 10.0
|
||||
##
|
||||
{ 'struct': 'ChardevHubWrapper',
|
||||
'data': { 'data': 'ChardevHub' } }
|
||||
|
||||
##
|
||||
# @ChardevStdioWrapper:
|
||||
#
|
||||
|
@ -703,6 +729,7 @@
|
|||
'pty': 'ChardevPtyWrapper',
|
||||
'null': 'ChardevCommonWrapper',
|
||||
'mux': 'ChardevMuxWrapper',
|
||||
'hub': 'ChardevHubWrapper',
|
||||
'msmouse': 'ChardevCommonWrapper',
|
||||
'wctablet': 'ChardevCommonWrapper',
|
||||
'braille': { 'type': 'ChardevCommonWrapper',
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue