On Thu, Mar 20, 2025 at 08:56:04AM +0100, Maximilian Immanuel Brandtner wrote:
> I've been working on an RFC patch-set to implement resizing for
> consoles in QEMU. Now that the patch-set is in review I've turned my
> attention to bringing this feature to libvirt.

Can you point to the QEMU patchset URL ?

> With the QEMU patch-set there are two ways to resize a pty chardev.
> 1. send a TIOCSWINSZ ioctl
> 2. send a QMP msg
> 
> The first approach doesn't work under Libvirt. Pty chardevs are proxied
> over a FIFO meaning the ioctl wouldn't get to libvirt. Furthermore,
> this approach is incompatible with remote management which libvirt
> seems to go to great lengths to support.

So we have the flow

 virsh console  (or equiv mgmt equiv)
   -> virStream
        -> libvirtd/virtqemud
             -> virStream
                  -> PTY
                       -> QEMU chardev
                            -> guest serial port / paravirt console

NB I've always wanted to extend our console stream handling to support
UNIX socket / TCP socket chardev instead of the PTY, as the connection
semantics are so much saner to deal with.

> Sending a QMP message is a QEMU specific feature. It seems to me that
> adding a new handle (something like domainResizeConsole) would have to
> be added to the virHypervisorDriver struct. It would be really nifty if
> the resize handle could be implemented in the virStream, however it
> seems that all the virStreamDriver handlers are common code (aka shared
> across all hypervisors). From what I've seen it seems that the only way
> to switch from common code to hypervisor specific code would be over
> the virHypervisorDriver. As it stands it seems to me that the best
> course of action would be adding a new handle to the
> virHypervisorDriver, but I'm unsure whether that's really the right
> call.

How is the window resize supposed to be passed to the QEMU chardev
backend for the different chardev backend types ?

> TLDR I have the following 2 questions:
> - Should the resize handle be implemented in the virHypervisorDriver
> directly or in the virStreamDriver?

Unclear currently. I did think about this a long while back and tried
to hack something into virStream, but never completed it and it was
not as simple as it first seemed

> - Is there a way to get the QMP alias of a chardev from a virStream?

No, currently the stream only knows about the underlying host OS channel,
nothing about the hypervisor

With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

Reply via email to