Laurent Vivier <lviv...@redhat.com> writes: > The netdev reports NETDEV_VHOST_USER_CONNECTED event when > the chardev is connected, and NETDEV_VHOST_USER_DISCONNECTED > when it is disconnected. > > The NETDEV_VHOST_USER_CONNECTED event includes the chardev id. > > This allows a system manager like libvirt to detect when the server > fails. > > For instance with passt: > > { 'execute': 'qmp_capabilities' } > { "return": { } } > > [killing passt here] > > { "timestamp": { "seconds": 1739538634, "microseconds": 920450 }, > "event": "NETDEV_VHOST_USER_DISCONNECTED", > "data": { "netdev-id": "netdev0" } } > > [automatic reconnection with reconnect-ms] > > { "timestamp": { "seconds": 1739538638, "microseconds": 354181 }, > "event": "NETDEV_VHOST_USER_CONNECTED", > "data": { "netdev-id": "netdev0", "chardev-id": "chr0" } } > > Tested-by: Stefano Brivio <sbri...@redhat.com> > Signed-off-by: Laurent Vivier <lviv...@redhat.com> > --- > > Notes: > v4: > - as ChardevInfo is not needed, move events definition from > qapi/char.json to qapi/net.json > > v3: > - remove ChardevInfo, provides only the chardev id > > v2: > - remove duplicate line info.frontend_open > > qapi/net.json | 40 ++++++++++++++++++++++++++++++++++++++++ > net/vhost-user.c | 3 +++ > 2 files changed, 43 insertions(+) > > diff --git a/qapi/net.json b/qapi/net.json > index 2739a2f42332..310cc4fd1907 100644 > --- a/qapi/net.json > +++ b/qapi/net.json > @@ -1031,3 +1031,43 @@ > ## > { 'event': 'NETDEV_STREAM_DISCONNECTED', > 'data': { 'netdev-id': 'str' } } > + > +## > +# @NETDEV_VHOST_USER_CONNECTED: > +# > +# Emitted when the vhost-user chardev is connected > +# > +# @netdev-id: QEMU netdev id that is connected > +# > +# @chardev-id: The character device id used by the QEMU netdev > +# > +# Since: 10.0 > +# > +# .. qmp-example:: > +# > +# <- { "timestamp": {"seconds": 1739538638, "microseconds": 354181 }, > +# "event": "NETDEV_VHOST_USER_CONNECTED", > +# "data": { "netdev-id": "netdev0", "chardev-id": "chr0" } } > +# > +## > +{ 'event': 'NETDEV_VHOST_USER_CONNECTED', > + 'data': { 'netdev-id': 'str', 'chardev-id': 'str' } } > + > +## > +# @NETDEV_VHOST_USER_DISCONNECTED: > +# > +# Emitted when the vhost-user chardev is disconnected > +# > +# @netdev-id: QEMU netdev id that is disconnected > +# > +# Since: 10.0 > +# > +# .. qmp-example:: > +# > +# <- { "timestamp": { "seconds": 1739538634, "microseconds": 920450 }, > +# "event": "NETDEV_VHOST_USER_DISCONNECTED", > +# "data": { "netdev-id": "netdev0" } } > +# > +## > +{ 'event': 'NETDEV_VHOST_USER_DISCONNECTED', > + 'data': { 'netdev-id': 'str' } } > diff --git a/net/vhost-user.c b/net/vhost-user.c > index 12555518e838..0b235e50c650 100644 > --- a/net/vhost-user.c > +++ b/net/vhost-user.c > @@ -16,6 +16,7 @@ > #include "chardev/char-fe.h" > #include "qapi/error.h" > #include "qapi/qapi-commands-net.h" > +#include "qapi/qapi-events-net.h" > #include "qemu/config-file.h" > #include "qemu/error-report.h" > #include "qemu/option.h" > @@ -271,6 +272,7 @@ static void chr_closed_bh(void *opaque) > if (err) { > error_report_err(err); > } > + qapi_event_send_netdev_vhost_user_disconnected(name); > } > > static void net_vhost_user_event(void *opaque, QEMUChrEvent event) > @@ -300,6 +302,7 @@ static void net_vhost_user_event(void *opaque, > QEMUChrEvent event) > net_vhost_user_watch, s); > qmp_set_link(name, true, &err); > s->started = true; > + qapi_event_send_netdev_vhost_user_connected(name, chr->label);
We seem to use "label" and "id" interchangeably. Unfortunate. > break; > case CHR_EVENT_CLOSED: > /* a close event may happen during a read/write, but vhost Like Daniel, I wonder whether provding events for chardevs instead would be more broadly useful. That said, there's nothing wrong with the patch itself, so Acked-by: Markus Armbruster <arm...@redhat.com>