Hi On Mon, Dec 20, 2021 at 10:24 PM Vladimir Sementsov-Ogievskiy < vsementsov@virtuozzo.com> wrote: > Add command that can change addresses where VNC server listens for new > connections. Prior to 6.0 this functionality was available through > 'change' qmp command which was deleted. > > Signed-off-by: Vladimir Sementsov-Ogievskiy > Looks good to me, Reviewed-by: Marc-André Lureau Could you write an avocado test for it? (tests/avocado/vnc.py) --- > docs/about/removed-features.rst | 3 ++- > qapi/ui.json | 12 ++++++++++++ > ui/vnc.c | 26 ++++++++++++++++++++++++++ > 3 files changed, 40 insertions(+), 1 deletion(-) > > diff --git a/docs/about/removed-features.rst > b/docs/about/removed-features.rst > index d42c3341de..20e6901a82 100644 > --- a/docs/about/removed-features.rst > +++ b/docs/about/removed-features.rst > @@ -348,7 +348,8 @@ documentation of ``query-hotpluggable-cpus`` for > additional details. > ``change`` (removed in 6.0) > ''''''''''''''''''''''''''' > > -Use ``blockdev-change-medium`` or ``change-vnc-password`` instead. > +Use ``blockdev-change-medium`` or ``change-vnc-password`` or > +``change-vnc-listen`` instead. > > ``query-events`` (removed in 6.0) > ''''''''''''''''''''''''''''''''' > diff --git a/qapi/ui.json b/qapi/ui.json > index d7567ac866..14e6fe0b4c 100644 > --- a/qapi/ui.json > +++ b/qapi/ui.json > @@ -1304,3 +1304,15 @@ > { 'command': 'display-reload', > 'data': 'DisplayReloadOptions', > 'boxed' : true } > + > +## > +# @change-vnc-listen: > +# > +# Change set of addresses to listen for connections. > +# > +# Since: 7.0 > +# > +## > +{ 'command': 'change-vnc-listen', > + 'data': { 'id': 'str', 'addresses': ['SocketAddress'], > + '*websockets': ['SocketAddress'] } } > diff --git a/ui/vnc.c b/ui/vnc.c > index c9e26c70df..69bbf3b6f6 100644 > --- a/ui/vnc.c > +++ b/ui/vnc.c > @@ -4212,6 +4212,32 @@ fail: > vnc_display_close(vd); > } > > +void qmp_change_vnc_listen(const char *id, SocketAddressList *addresses, > + bool has_websockets, SocketAddressList > *websockets, > + Error **errp) > +{ > + VncDisplay *vd = vnc_display_find(id); > + > + if (!vd) { > + error_setg(errp, "VNC display '%s' not active", id); > + return; > + } > + > + if (vd->listener) { > + qio_net_listener_disconnect(vd->listener); > + object_unref(OBJECT(vd->listener)); > + } > + vd->listener = NULL; > + > + if (vd->wslistener) { > + qio_net_listener_disconnect(vd->wslistener); > + object_unref(OBJECT(vd->wslistener)); > + } > + vd->wslistener = NULL; > + > + vnc_display_listen(vd, addresses, websockets, errp); > +} > + > void vnc_display_add_client(const char *id, int csock, bool skipauth) > { > VncDisplay *vd = vnc_display_find(id); > -- > 2.31.1 > > > -- Marc-André Lureau