[libvirt] [PATCHv2] qemu: Do fake auto-allocation of ports when generating native command

Michal Privoznik mprivozn at redhat.com
Mon May 6 17:10:09 UTC 2013


On 02.05.2013 11:16, Peter Krempa wrote:
> When attempting to generate the native command line from an XML file
> that uses graphics port auto allocation, the generated commandline
> wouldn't be valid.
> 
> This patch adds fake autoallocation of ports as done when starting the
> actual machine.
> ---
> 
> Notes:
>     Version 2:
>     - rebased after context-conflict with 11fc1beab6e018a88182f80056d35217c150b3de
> 
>  src/qemu/qemu_driver.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 52 insertions(+)
> 
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 9492850..45fcf05 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -5274,6 +5274,58 @@ static char *qemuConnectDomainXMLToNative(virConnectPtr conn,
>      if (qemuDomainAssignAddresses(def, qemuCaps, NULL) < 0)
>          goto cleanup;
> 
> +    /* do fake auto-alloc of graphics ports, if such config is used */
> +    for (i = 0 ; i < def->ngraphics; ++i) {

I think we prefer postfix notation in for().

> +        virDomainGraphicsDefPtr graphics = def->graphics[i];
> +        if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC &&
> +            !graphics->data.vnc.socket && graphics->data.vnc.autoport) {
> +            graphics->data.vnc.port = 5900;
> +        } else if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE) {
> +            int j;
> +            bool needTLSPort = false;
> +            bool needPort = false;
> +            int defaultMode = graphics->data.spice.defaultMode;
> +
> +            if (graphics->data.spice.autoport) {
> +                /* check if tlsPort or port need allocation */
> +                for (j = 0 ; j < VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_LAST ; j++) {
> +                    switch (graphics->data.spice.channels[j]) {
> +                    case VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_SECURE:
> +                        needTLSPort = true;
> +                        break;
> +
> +                    case VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_INSECURE:
> +                        needPort = true;
> +                        break;
> +
> +                    case VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_ANY:
> +                        switch (defaultMode) {
> +                        case VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_SECURE:
> +                            needTLSPort = true;
> +                            break;
> +
> +                        case VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_INSECURE:
> +                            needPort = true;
> +                            break;
> +
> +                        case VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_ANY:
> +                            needTLSPort = true;
> +                            needPort = true;
> +                            break;
> +                        }
> +                        break;
> +                    }
> +                }
> +            }

This chunk is copied from qemu_process.c from
qemuProcessSPICEAllocatePorts(). Shall we somehow create a function
helper for this?

> +
> +            if (needPort || graphics->data.spice.port == -1)
> +                graphics->data.spice.port = 5901;
> +
> +            if (needTLSPort || graphics->data.spice.tlsPort == -1)
> +                graphics->data.spice.tlsPort = 5902;
> +        }
> +    }
> +
>      if (!(cmd = qemuBuildCommandLine(conn, driver, def,
>                                       &monConfig, monitor_json, qemuCaps,
>                                       NULL, -1, NULL, VIR_NETDEV_VPORT_PROFILE_OP_NO_OP)))
> 

If we don't need a helper (and hence v3) I can live with this as is.
ACK.

Michal




More information about the libvir-list mailing list