[libvirt] [PATCH v2 09/12] qemu_process: separate graphics socket and address generation

Marc-André Lureau marcandre.lureau at gmail.com
Wed May 11 18:13:59 UTC 2016


On Wed, May 11, 2016 at 5:08 PM, Pavel Hrdina <phrdina at redhat.com> wrote:
> Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
> ---
>  src/qemu/qemu_process.c | 123 ++++++++++++++++++++++++++++++------------------
>  1 file changed, 77 insertions(+), 46 deletions(-)
>

Reviewed-by: Marc-André Lureau <marcandre.lureau at redhat.com>


> diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
> index 3d78455..21c2db2 100644
> --- a/src/qemu/qemu_process.c
> +++ b/src/qemu/qemu_process.c
> @@ -4418,14 +4418,87 @@ qemuProcessGraphicsReservePorts(virQEMUDriverPtr driver,
>
>
>  static int
> +qemuProcessGraphicsListenGenerate(virDomainObjPtr vm,
> +                                  virQEMUDriverConfigPtr cfg,
> +                                  virDomainGraphicsDefPtr graphics)
> +{
> +    qemuDomainObjPrivatePtr priv = vm->privateData;
> +    const char *type = virDomainGraphicsTypeToString(graphics->type);
> +    char *listenAddr = NULL;
> +    bool autoSocket = false;
> +    size_t i;
> +
> +    switch (graphics->type) {
> +    case VIR_DOMAIN_GRAPHICS_TYPE_VNC:
> +        if (cfg->vncAutoUnixSocket) {
> +            autoSocket = true;
> +        } else {
> +            listenAddr = cfg->vncListen;
> +        }
> +        break;
> +
> +    case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
> +            listenAddr = cfg->spiceListen;
> +        break;
> +
> +    case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
> +    case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
> +    case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
> +    case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
> +        break;
> +    }
> +
> +    for (i = 0; i < graphics->nListens; i++) {
> +        virDomainGraphicsListenDefPtr glisten = &graphics->listens[i];
> +
> +        switch (glisten->type) {
> +        case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS:
> +            /* If there is no address specified we will use address from
> +             * qemu.conf from '*Listen'.  If '*_auto_unix_socket' is set it has
> +             * higher priority and we will use unix socket as a default listen
> +             * type. */
> +            if (!glisten->address) {
> +                if (autoSocket) {
> +                    memset(glisten, 0, sizeof(virDomainGraphicsListenDef));
> +                    if (virAsprintf(&glisten->socket, "%s/%s.sock",
> +                                    priv->libDir, type) < 0)
> +                        return -1;
> +                    glisten->fromConfig = true;
> +                    glisten->type = VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET;
> +                } else if (listenAddr) {
> +                    if (VIR_STRDUP(glisten->address, listenAddr) < 0)
> +                        return -1;
> +                    glisten->fromConfig = true;
> +                }
> +            }
> +            break;
> +        case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET:
> +            if (!glisten->socket) {
> +                if (virAsprintf(&glisten->socket, "%s/%s.sock",
> +                                priv->libDir, type) < 0)
> +                    return -1;
> +                glisten->autogenerated = true;
> +            }
> +            break;
> +        case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE:
> +        case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK:
> +        case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST:
> +            break;
> +        }
> +    }
> +
> +    return 0;
> +}
> +
> +
> +static int
>  qemuProcessSetupGraphics(virQEMUDriverPtr driver,
>                           virDomainObjPtr vm,
>                           unsigned int flags)
>  {
>      virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
> -    qemuDomainObjPrivatePtr priv = vm->privateData;
>      bool allocate = !(flags & VIR_QEMU_PROCESS_START_PRETEND);
> -    size_t i, j;
> +    size_t i;
>      int ret = -1;
>
>      if (allocate && qemuProcessGraphicsReservePorts(driver, vm) < 0)
> @@ -4433,22 +4506,16 @@ qemuProcessSetupGraphics(virQEMUDriverPtr driver,
>
>      for (i = 0; i < vm->def->ngraphics; ++i) {
>          virDomainGraphicsDefPtr graphics = vm->def->graphics[i];
> -        const char *type = virDomainGraphicsTypeToString(graphics->type);
> -        char *listenAddr = NULL;
>
>          switch (graphics->type) {
>          case VIR_DOMAIN_GRAPHICS_TYPE_VNC:
>              if (qemuProcessVNCAllocatePorts(driver, graphics, allocate) < 0)
>                  goto cleanup;
> -
> -            listenAddr = cfg->vncListen;
>              break;
>
>          case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
>              if (qemuProcessSPICEAllocatePorts(driver, cfg, graphics, allocate) < 0)
>                  goto cleanup;
> -
> -            listenAddr = cfg->spiceListen;
>              break;
>
>          case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
> @@ -4458,44 +4525,8 @@ qemuProcessSetupGraphics(virQEMUDriverPtr driver,
>              break;
>          }
>
> -        for (j = 0; j < graphics->nListens; j++) {
> -            virDomainGraphicsListenDefPtr glisten = &graphics->listens[j];
> -
> -            switch (glisten->type) {
> -            case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS:
> -                if (!glisten->address) {
> -                    /* If there is no address specified and qemu.conf has
> -                     * vnc_auto_unix_socket set we should use unix socket as
> -                     * default instead of tcp listen. */
> -                    if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC &&
> -                        cfg->vncAutoUnixSocket) {
> -                        memset(glisten, 0, sizeof(virDomainGraphicsListenDef));
> -                        if (virAsprintf(&glisten->socket, "%s/%s.sock",
> -                                        priv->libDir, type) < 0)
> -                            goto cleanup;
> -                        glisten->fromConfig = true;
> -                        glisten->type = VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET;
> -                    } else if (listenAddr) {
> -                        if (VIR_STRDUP(glisten->address, listenAddr) < 0)
> -                            goto cleanup;
> -                        glisten->fromConfig = true;
> -                    }
> -                }
> -                break;
> -            case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET:
> -                if (!glisten->socket) {
> -                    if (virAsprintf(&glisten->socket, "%s/%s.sock",
> -                                    priv->libDir, type) < 0)
> -                        goto cleanup;
> -                    glisten->autogenerated = true;
> -                }
> -                break;
> -            case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE:
> -            case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK:
> -            case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST:
> -                break;
> -            }
> -        }
> +        if (qemuProcessGraphicsListenGenerate(vm, cfg, graphics) < 0)
> +            goto cleanup;
>      }
>
>      ret = 0;
> --
> 2.8.2
>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list



-- 
Marc-André Lureau




More information about the libvir-list mailing list