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(a)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 :|