
On Thu, Mar 20, 2025 at 11:05:04AM +0100, Peter Krempa via Devel wrote:
Libvirt supports console also for unix-socket backed chardevs. I presume that would require the QMP command approach instead. That will likely reuqire more plumbing because on the first glance we don't seem to have the access to the VM object from the stream code. A callback could potentially solve that.
I thought we didn't support UNIX socket chardevs for the console because in qemuDomainOpenConsole we have if (chr->source->type != VIR_DOMAIN_CHR_TYPE_PTY) { virReportError(VIR_ERR_INTERNAL_ERROR, _("character device %1$s is not using a PTY"), dev_name ? dev_name : NULLSTR(chr->info.alias)); goto cleanup; } and yet virChrdevOpen supports it since commit 66a0664974b6200b9184ea6b4ca9d816f6924f8c Author: John Eckersberg <jeckersb@redhat.com> Date: Wed Jan 2 10:38:53 2013 -0500 conf: Add unix socket support to virChrdevOpen so surely our check in qemuDomainOpenConsole has prevented this ever being used.
TLDR I have the following 2 questions: - Should the resize handle be implemented in the virHypervisorDriver directly or in the virStreamDriver? - Is there a way to get the QMP alias of a chardev from a virStream?
I'd suggest to either implement it as another type of data transported via the stream or a standalone API.
The client application which uses the stream knows which console it opened so it does have enough data to issue the proper API call with parameters identical to how it opened the console.
The approach of adding stream APIs looks a bit cleaner on the first glance but as I've noted I'm not sure how complicated it will be to access the VM object if QMP command will be needed.
If we consider that resize is just one, of possibly many, control commands you might want over a terminal, then we would want a general callback that can be registered with the stream impl virStreamControlCommand(virStreamPtr st, virTypedParameter params, unsigned int nparams); and an internal method typedef int (*virFDStreamControlCommandCallback)(virFDStream *st, virTypedParameter params, unsigned int nparams, void *opaque) virFDStreamSetInternalControlCommandCallback(virFDStream, virFDStreamControlCommandCallback cb, void *opaque, virFreeCallback freecb) which could be used to pass the 'virDomainObjPt' as the 'opaque' param 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 :|