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 <[email protected]>
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 :|