[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v11 17/17] net: stream: add QAPI events to report connection state
Laurent Vivier <lvivier@xxxxxxxxxx> writes: > The netdev reports NETDEV_STREAM_CONNECTED event when the backend > is connected, and NETDEV_STREAM_EOC when it is disconnected. > > The NETDEV_STREAM_CONNECTED event includes the URI of the destination > address. > > Signed-off-by: Laurent Vivier <lvivier@xxxxxxxxxx> > Acked-by: Michael S. Tsirkin <mst@xxxxxxxxxx> > --- > net/stream.c | 11 +++++++++-- > qapi/net.json | 46 ++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 55 insertions(+), 2 deletions(-) > > diff --git a/net/stream.c b/net/stream.c > index 0293e38e5b57..821ae3265356 100644 > --- a/net/stream.c > +++ b/net/stream.c > @@ -38,6 +38,7 @@ > #include "io/channel.h" > #include "io/channel-socket.h" > #include "io/net-listener.h" > +#include "qapi/qapi-events-net.h" > > typedef struct NetStreamState { > NetClientState nc; > @@ -168,6 +169,8 @@ static gboolean net_stream_send(QIOChannel *ioc, > s->nc.link_down = true; > qemu_set_info_str(&s->nc, ""); > > + qapi_event_send_netdev_stream_eoc(s->nc.name); > + > return G_SOURCE_REMOVE; > } > buf = buf1; > @@ -243,9 +246,10 @@ static void net_stream_listen(QIONetListener *listener, > g_assert(addr != NULL); > uri = socket_uri(addr); > qemu_set_info_str(&s->nc, uri); > - g_free(uri); > qapi_free_SocketAddress(addr); > > + qapi_event_send_netdev_stream_connected(s->nc.name, uri); > + g_free(uri); > } > > static void net_stream_server_listening(QIOTask *task, gpointer opaque) > @@ -317,12 +321,12 @@ static void net_stream_client_connected(QIOTask *task, > gpointer opaque) > g_assert(addr != NULL); > uri = socket_uri(addr); > qemu_set_info_str(&s->nc, uri); > - g_free(uri); > > ret = qemu_socket_try_set_nonblock(sioc->fd); > if (addr->type == SOCKET_ADDRESS_TYPE_FD && ret < 0) { > qemu_set_info_str(&s->nc, "can't use file descriptor %s (errno %d)", > addr->u.fd.str, -ret); > + g_free(uri); > qapi_free_SocketAddress(addr); > goto error; > } > @@ -338,6 +342,9 @@ static void net_stream_client_connected(QIOTask *task, > gpointer opaque) > s, NULL); > s->nc.link_down = false; > > + qapi_event_send_netdev_stream_connected(s->nc.name, uri); > + g_free(uri); > + > return; > error: > object_unref(OBJECT(s->ioc)); > diff --git a/qapi/net.json b/qapi/net.json > index 6a1a49749294..69f83bceff3f 100644 > --- a/qapi/net.json > +++ b/qapi/net.json > @@ -895,3 +895,49 @@ > ## > { 'event': 'FAILOVER_NEGOTIATED', > 'data': {'device-id': 'str'} } > + > +## > +# @NETDEV_STREAM_CONNECTED: > +# > +# Emitted when the netdev stream backend is connected > +# > +# @netdev-id: QEMU netdev id that is connected > +# @uri: The Uniform Resource Identifier identifying the destination address Is an URI the appropriate representation here? It's not how we specify such addresses elsewhere in QAPI/QMP... > +# > +# Since: 7.2 > +# > +# Example: > +# > +# <- { 'event': 'NETDEV_STREAM_CONNECTED', > +# 'data': {'uri': 'tcp:::1:1234', 'netdev-id': 'netdev0'}, > +# 'timestamp': {'seconds': 1663330564, 'microseconds': 804317} } > +# > +# or > +# > +# <- { 'event': 'NETDEV_STREAM_CONNECTED', > +# 'data': {'uri': ''unix:/tmp/qemu0', 'netdev-id': 'netdev0'}, > +# 'timestamp': {'seconds': 1663330564, 'microseconds': 804317} } > +# > +## > +{ 'event': 'NETDEV_STREAM_CONNECTED', > + 'data': { 'netdev-id': 'str', > + 'uri': 'str' } } > + > +## > +# @NETDEV_STREAM_EOC: What does "EOC" mean? Could this be named NETDEV_STREAM_DISCONNECTED, for symmetry with NETDEV_STREAM_CONNECTED? > +# > +# Emitted when the netdev stream backend is disconnected > +# > +# @netdev-id: QEMU netdev id that is disconnected > +# > +# Since: 7.2 > +# > +# Example: > +# > +# <- { 'event': 'NETDEV_STREAM_EOC', > +# 'data': {'netdev-id': 'netdev0'}, > +# 'timestamp': {'seconds': 1663330937, 'microseconds': 526695} } > +# > +## > +{ 'event': 'NETDEV_STREAM_EOC', > + 'data': { 'netdev-id': 'str' } }
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |