qemu-options.hx: describe hub chardev and aggregation of several backends

This adds a few lines describing `hub` aggregator configuration
for aggregation of several backend devices with a single frontend
device.

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-5-r.peniaev@gmail.com>
This commit is contained in:
Roman Penyaev 2025-01-23 09:53:24 +01:00 committed by Marc-André Lureau
parent c9c05ed525
commit aeb6b818c1

View File

@ -3733,7 +3733,7 @@ SRST
The general form of a character device option is: The general form of a character device option is:
``-chardev backend,id=id[,mux=on|off][,options]`` ``-chardev backend,id=id[,mux=on|off][,options]``
Backend is one of: ``null``, ``socket``, ``udp``, ``msmouse``, Backend is one of: ``null``, ``socket``, ``udp``, ``msmouse``, ``hub``,
``vc``, ``ringbuf``, ``file``, ``pipe``, ``console``, ``serial``, ``vc``, ``ringbuf``, ``file``, ``pipe``, ``console``, ``serial``,
``pty``, ``stdio``, ``braille``, ``parallel``, ``pty``, ``stdio``, ``braille``, ``parallel``,
``spicevmc``, ``spiceport``. The specific backend will determine the ``spicevmc``, ``spiceport``. The specific backend will determine the
@ -3790,9 +3790,10 @@ The general form of a character device option is:
the QEMU monitor, and ``-nographic`` also multiplexes the console the QEMU monitor, and ``-nographic`` also multiplexes the console
and the monitor to stdio. and the monitor to stdio.
There is currently no support for multiplexing in the other If you need to aggregate data in the opposite direction (where one
direction (where a single QEMU front end takes input and output from QEMU frontend interface receives input and output from multiple
multiple chardevs). backend chardev devices), please refer to the paragraph below
regarding chardev ``hub`` aggregator device configuration.
Every backend supports the ``logfile`` option, which supplies the Every backend supports the ``logfile`` option, which supplies the
path to a file to record all data transmitted via the backend. The path to a file to record all data transmitted via the backend. The
@ -3892,6 +3893,46 @@ The available backends are:
Forward QEMU's emulated msmouse events to the guest. ``msmouse`` Forward QEMU's emulated msmouse events to the guest. ``msmouse``
does not take any options. does not take any options.
``-chardev hub,id=id,chardevs.0=id[,chardevs.N=id]``
Explicitly create chardev backend hub device with the possibility
to aggregate input from multiple backend devices and forward 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. Aggregation supported for up to 4 chardev
devices. (Since 10.0)
For example, the following is a use case of 2 backend devices:
virtual console ``vc0`` and a pseudo TTY ``pty0`` connected to
a single virtio hvc console frontend device with a hub ``hub0``
help. Virtual console renders text to an image, which can be
shared over the VNC protocol. In turn, pty backend provides
bidirectional communication to the virtio hvc console over the
pseudo TTY file. The example configuration can be as follows:
::
-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
Once QEMU starts VNC client and any TTY emulator can be used to
control a single hvc console:
::
# Start TTY emulator
tio /tmp/pty
# Start VNC client and switch to virtual console Ctrl-Alt-2
vncviewer :0
Several frontend devices is not supported. Stacking of multiplexers
and hub devices is not supported as well.
``-chardev vc,id=id[[,width=width][,height=height]][[,cols=cols][,rows=rows]]`` ``-chardev vc,id=id[[,width=width][,height=height]][[,cols=cols][,rows=rows]]``
Connect to a QEMU text console. ``vc`` may optionally be given a Connect to a QEMU text console. ``vc`` may optionally be given a
specific size. specific size.