In this series I try to implement the ideas that (I believe) were suggested by Gerd and Amit in <https://bugzilla.redhat.com/show_bug.cgi?id=1080376>.
When the guest agent exits or dies (disconnects from the virtio-serial port), the backend (eg. a host-side unix domain socket) doesn't (in general, can't) reflect it. This lack of info tends to trip up libvirt in some cases, waiting indefinitely for an agent that doesn't exist. The series adds two monitor events that report about virtio-serial ports being opened and closed (for online notification), and extends the "query-chardev" QMP command's return type with a "frontend_open" bool (for querying at late libvirt startup). Admittedly, these two don't report on the same level (frontend vs. backend), but the association is under libvirt's control, so it should be fine, and it helps keep the series non-intrusive. (Also known as, "I have a fleeting chance implementing it, having authored neither chardev nor virtio-serial".) The series can be tested with libvirt immediately, as follows: 1. set up qga as usual 2. add the following XML element under the /domain element in the domain config: <qemu:commandline xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'> <qemu:arg value='-global'/> <qemu:arg value='virtserialport.report_connstate=true'/> </qemu:commandline> (libvirt ignores unrecognized events, see qemuMonitorJSONIOProcessEvent()) 3. configure libvirtd to log QEMU monitor and agent traffic; in "libvirtd.conf", set log_filters="1:qemu_monitor_ 1:qemu_agent" log_outputs="1:file:/var/log/libvirt/libvirtd.log" 4. in the guest, start & stop the guest agent, and in lockstep: - on the host, issue: virsh qemu-monitor-command DOMAIN --pretty \ '{"execute":"query-chardev"}' - on the host, grep the libvirtd log for the new events: egrep 'QEMU_MONITOR_RECV_EVENT: .*VSERPORT_(DIS)?CONNECTED' \ /var/log/libvirt/libvirtd.log RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1080376 Laszlo Ersek (2): virtio-serial: report frontend connection state via monitor char: report frontend open/closed state in 'query-chardev' qapi-schema.json | 8 +++++++- include/monitor/monitor.h | 2 ++ hw/char/virtio-console.c | 20 +++++++++++++++++--- monitor.c | 2 ++ qemu-char.c | 2 ++ docs/qmp/qmp-events.txt | 34 ++++++++++++++++++++++++++++++++++ qmp-commands.hx | 19 ++++++++++++++----- 7 files changed, 78 insertions(+), 9 deletions(-) -- 1.8.3.1