From: Eric Blake <eblake@redhat.com>
To: "Daniel P. Berrange" <berrange@redhat.com>, qemu-devel@nongnu.org
Cc: Gerd Hoffmann <kraxel@redhat.com>
Subject: Re: [Qemu-devel] [PATCH 8/8] ui: add ability to specify multiple VNC listen addresses
Date: Fri, 6 Jan 2017 10:34:11 -0600 [thread overview]
Message-ID: <7fb1d736-aef5-ef03-ca11-7caf1b8a6e9d@redhat.com> (raw)
In-Reply-To: <20170105160701.22118-9-berrange@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 4256 bytes --]
On 01/05/2017 10:07 AM, Daniel P. Berrange wrote:
> This change allows the listen address and websocket address
> options for -vnc to be repeated. This causes the VNC server
> to listen on multiple addresses. e.g.
>
> $ $QEMU -vnc vnc=localhost:1,vnc=unix:/tmp/vnc,\
> websocket=127.0.0.1:8080,websocket=[::]:8081
>
> results in listening on
>
> 127.0.0.1:5901, 127.0.0.1:8080, ::1:5901, :::8081 & /tmp/vnc
>
> Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
> ---
> ui/vnc.c | 191 +++++++++++++++++++++++++++++++++++++++++++--------------------
> 1 file changed, 130 insertions(+), 61 deletions(-)
>
> + for (i = 0; i < nsaddrstr; i++) {
> + int rv;
> + rv = vnc_display_get_address(saddrstr[i], false, 0, to,
> + has_ipv4, has_ipv6,
> + ipv4, ipv6,
> + &saddr, errp);
> + if (rv < 0) {
> + goto cleanup;
> + }
> + /* Historical compat - if only a single listen address was
> + * provided, then the display num can be used to set the
> + * default websocket port
> + */
> + if (nsaddrstr == 1) {
> + displaynum = rv;
> + }
> + *retsaddr = g_renew(SocketAddress *, *retsaddr, *retnsaddr + 1);
> + (*retsaddr)[(*retnsaddr)++] = saddr;
Again, do we care if the user supplies LOTS of vnc addresses and
witnesses O(n^2) initialization cost?
> }
> - if (wsaddrstr) {
> - if (vnc_display_get_address(wsaddrstr, true, displaynum, to,
> + for (i = 0; i < nwsaddrstr; i++) {
> + if (vnc_display_get_address(wsaddrstr[i], true, displaynum, to,
> has_ipv4, has_ipv6,
> +
> + *retwsaddr = g_renew(SocketAddress *, *retwsaddr, *retnwsaddr + 1);
> + (*retwsaddr)[(*retnwsaddr)++] = wsaddr;
Same for websocket addresses.
> static int vnc_display_connect(VncDisplay *vd,
> - SocketAddress *saddr,
> - SocketAddress *wsaddr,
> + SocketAddress **saddr,
> + size_t nsaddr,
> + SocketAddress **wsaddr,
> + size_t nwsaddr,
> Error **errp)
> {
> /* connect to viewer */
> QIOChannelSocket *sioc = NULL;
> - if (wsaddr) {
> + if (nwsaddr != 0) {
> error_setg(errp, "Cannot use websockets in reverse mode");
> return -1;
> }
> - vd->is_unix = saddr->type == SOCKET_ADDRESS_KIND_UNIX;
> + if (nsaddr != 1) {
> + error_setg(errp, "Expected a single address in reverse mo");
s/mo/mode/
> static int vnc_display_listen(VncDisplay *vd,
> - if (wsaddr &&
> - vnc_display_listen_addr(vd, wsaddr,
> - "vnc-ws-listen",
> - &vd->lwebsock,
> - &vd->lwebsock_tag,
> - &vd->nlwebsock,
> - errp) < 0) {
> - return -1;
> + for (i = 0; i < nwsaddr; i++) {
> + if (vnc_display_listen_addr(vd, wsaddr[i],
> + "vnc-ws-listen",
> + &vd->lwebsock,
> + &vd->lwebsock_tag,
> + &vd->nlwebsock,
> + errp) < 0) {
And while your earlier arguments that resolving a single name into
multiple websocket IP addrs is not going to notice an O(n^2) growth
pattern, now we are calling that growth pattern over N websocket names
where N is user-controlled. But this time I don't have a good bound on
how many IP addrs nlwebsock will grow to. So maybe we do want to
consider geometric allocation growth (requires tracking and passing an
allocated size alongside the currently-used size).
But overall I think you're enhancement makes sense.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
next prev parent reply other threads:[~2017-01-06 16:34 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-05 16:06 [Qemu-devel] [PATCH 0/8] Support multiple listening sockets per VNC server Daniel P. Berrange
2017-01-05 16:06 ` [Qemu-devel] [PATCH 1/8] ui: fix regression handling bare 'websocket' option to -vnc Daniel P. Berrange
2017-01-06 13:39 ` Eric Blake
2017-01-05 16:06 ` [Qemu-devel] [PATCH 2/8] ui: fix reporting of VNC auth in query-vnc-servers Daniel P. Berrange
2017-01-06 15:06 ` Eric Blake
2017-01-05 16:06 ` [Qemu-devel] [PATCH 3/8] ui: refactor VncDisplay to allow multiple listening sockets Daniel P. Berrange
2017-01-06 15:23 ` Eric Blake
2017-01-06 15:28 ` Daniel P. Berrange
2017-01-05 16:06 ` [Qemu-devel] [PATCH 4/8] ui: refactor code for populating SocketAddress from vnc_display_open Daniel P. Berrange
2017-01-06 15:47 ` Eric Blake
2017-01-05 16:06 ` [Qemu-devel] [PATCH 5/8] ui: extract code to connect/listen " Daniel P. Berrange
2017-01-06 16:00 ` Eric Blake
2017-01-05 16:06 ` [Qemu-devel] [PATCH 6/8] ui: let VNC server listen on all resolved IP addresses Daniel P. Berrange
2017-01-06 16:14 ` Eric Blake
2017-01-05 16:07 ` [Qemu-devel] [PATCH 7/8] util: add qemu_opt_get_all() to get repeated opts Daniel P. Berrange
2017-01-06 16:22 ` Eric Blake
2017-01-05 16:07 ` [Qemu-devel] [PATCH 8/8] ui: add ability to specify multiple VNC listen addresses Daniel P. Berrange
2017-01-06 16:34 ` Eric Blake [this message]
2017-01-05 17:26 ` [Qemu-devel] [PATCH 0/8] Support multiple listening sockets per VNC server no-reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7fb1d736-aef5-ef03-ca11-7caf1b8a6e9d@redhat.com \
--to=eblake@redhat.com \
--cc=berrange@redhat.com \
--cc=kraxel@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).