[libvirt] [PATCH v6 09/10] spice: introduce listen type none

Ján Tomko jtomko at redhat.com
Thu Jun 9 12:12:47 UTC 2016


On Wed, Jun 08, 2016 at 05:25:47PM +0200, Pavel Hrdina wrote:
> This new listen type is currently supported only by spice graphics.
> It's introduced to make it easier and clearer specify to not listen
> anywhere in order to start a guest with OpenGL support.
> 
> The old way to do this was set spice graphics autoport='no' and don't
> specify any ports.  The new way is to use <listen type='none'/>.  In
> order to be able to migrate to old libvirt the migratable XML will be
> generated without the listen element and with autoport='no'.  Also the
> old configuration will be automatically converted to the this listen
> type.
> 
> Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
> ---
>  docs/formatdomain.html.in                          | 11 ++++
>  docs/schemas/domaincommon.rng                      |  5 ++
>  src/conf/domain_conf.c                             | 77 ++++++++++++++++++----
>  src/qemu/qemu_command.c                            | 13 ++--
>  .../qemuxml2argv-video-virtio-gpu-spice-gl.args    |  2 +-
>  .../qemuxml2xmlout-video-virtio-gpu-spice-gl.xml   |  4 +-
>  6 files changed, 89 insertions(+), 23 deletions(-)
> 

ACK

> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index eaa0770..d1539d7 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -3921,6 +3921,33 @@ virDomainDefPostParseTimer(virDomainDefPtr def)
>  }
>  
>  
> +static void
> +virDomainDefPostParseGraphics(virDomainDef *def)
> +{
> +    size_t i;
> +
> +    for (i = 0; i < def->ngraphics; i++) {
> +        virDomainGraphicsDefPtr graphics = def->graphics[i];
> +
> +        /* If spice graphics is configured without ports and with autoport='no'
> +         * then we start qemu with Spice to not listen anywhere.  Let's convert
> +         * this configuration to the new listen type='none' which does the
> +         * same. */
> +        if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE) {
> +            virDomainGraphicsListenDefPtr glisten = &graphics->listens[0];
> +
> +            if (glisten->type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS &&
> +                graphics->data.spice.port == 0 &&
> +                graphics->data.spice.tlsPort == 0 &&
> +                !graphics->data.spice.autoport) {
> +                VIR_FREE(glisten->address);
> +                glisten->type = VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE;

Fun!

> +            }
> +        }
> +    }
> +}
> +
> +

> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index 1b46012..d03c6e0 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -7392,6 +7392,11 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg,
>          break;
>  
>      case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE:
> +        /* QEMU requires either port or tls-port to be specified if there is no
> +         * other argument. Use a dummy port=0. */
> +        virBufferAddLit(&opt, "port=0,");
> +        hasInsecure = true;
> +        break;
>      case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST:
>          break;
>      }
> @@ -7539,13 +7544,7 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg,
>      virBufferTrim(&opt, ",", -1);
>  
>      virCommandAddArg(cmd, "-spice");
> -    /* If we did not add any SPICE arguments, add a dummy 'port=0' one
> -     * as -spice alone is not allowed on QEMU command line
> -     */
> -    if (virBufferUse(&opt) == 0)
> -        virCommandAddArg(cmd, "port=0");
> -    else
> -        virCommandAddArgBuffer(cmd, &opt);
> +    virCommandAddArgBuffer(cmd, &opt);
>      if (graphics->data.spice.keymap)
>          virCommandAddArgList(cmd, "-k",
>                               graphics->data.spice.keymap, NULL);

This essentially reverts commit 6d28ef91:
    qemu: Don't add -spice port=0 when no port is specified

I think that change should be proposed in a separate patch which mentions
reverting commit 6d28ef91 with a justification.

Personally, I think not mentioning any ports or addrs is a better
representation of 'none' than port=0.

On the other hand, QEMU's help for -spice still mentions:
   at least one of {port, tls-port} is mandatory

Jan




More information about the libvir-list mailing list