[libvirt] [PATCH] domain_conf: Include the correct console alias

Daniel P. Berrange berrange at redhat.com
Fri Jun 28 13:55:53 UTC 2013


On Fri, Jun 28, 2013 at 03:31:17PM +0200, Michal Privoznik wrote:
> For some crazy backward compatibility, a console can by just an alias to
> a serial device. This is detected in the XML formating function which
> takes the values to format from corresponding serial device. Including
> the device alias. This results in wrong alias being written into the XML
> definition:
> 
>     <console type='pty' tty='/dev/pts/5'>
>       ...
>       <alias name='serial0'/>
>     </console>
> 
> While holding the correct alias still in the memory, it doesn't matter.
> However, it starts to matter as soon as libvirtd is restarted and the
> (incorrect) alias is read from status file.
> ---
>  src/conf/domain_conf.c | 12 +++++++++++-
>  1 file changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 011de71..61de836 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -16417,6 +16417,7 @@ virDomainDefFormatInternal(virDomainDefPtr def,
>              memcpy(&console, def->serials[n], sizeof(console));
>              console.deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE;
>              console.targetType = VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL;
> +            memcpy(&console.info, &def->consoles[n]->info, sizeof(console.info));
>          } else {
>              memcpy(&console, def->consoles[n], sizeof(console));
>          }
> @@ -16427,11 +16428,20 @@ virDomainDefFormatInternal(virDomainDefPtr def,
>          def->nconsoles == 0 &&
>          def->nserials > 0) {
>          virDomainChrDef console;
> +        char *alias = NULL;
>          memcpy(&console, def->serials[n], sizeof(console));
>          console.deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE;
>          console.targetType = VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL;
> -        if (virDomainChrDefFormat(buf, &console, flags) < 0)
> +        if (console.info.alias) {
> +            if (VIR_STRDUP(alias, "console0") < 0)
> +                goto error;
> +            console.info.alias = alias;
> +        }
> +        if (virDomainChrDefFormat(buf, &console, flags) < 0) {
> +            VIR_FREE(alias);
>              goto error;
> +        }
> +        VIR_FREE(alias);

This isn't any more correct that your previous patch. For the
dummy <console> elements, the alias *must* be copied from /
identical to the corresponding <serial> device config.


Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list