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

Michal Privoznik mprivozn at redhat.com
Fri Jun 28 14:45:08 UTC 2013


On 28.06.2013 15:55, Daniel P. Berrange wrote:
> 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
> 

So what are you saying is, it's the <serial> that has the wrong alias
assigned? The output should be like this then?

    <serial type='pty'>
      <source path='/dev/pts/5'/>
      <target type='isa-serial' port='0'/>
      <alias name='console0'/>
      <!-- originaly was serial0 -->
    </serial>

    <console type='pty' tty='/dev/pts/5'>
      <source path='/dev/pts/5'/>
      <target type='serial' port='0'/>
      <alias name='console0'/>
    </console>

Michal




More information about the libvir-list mailing list