mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-08-28 19:41:16 +00:00
qemu: Validate target model for serial devices
Target model and target type must agree for the configuration to make sense, so check that's actually the case and error out otherwise. Signed-off-by: Andrea Bolognani <abologna@redhat.com> Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
This commit is contained in:
parent
72bf21f233
commit
a9254a2d6e
@ -209,6 +209,8 @@ virDomainChrGetDomainPtrs;
|
|||||||
virDomainChrInsertPreAlloced;
|
virDomainChrInsertPreAlloced;
|
||||||
virDomainChrPreAlloc;
|
virDomainChrPreAlloc;
|
||||||
virDomainChrRemove;
|
virDomainChrRemove;
|
||||||
|
virDomainChrSerialTargetModelTypeFromString;
|
||||||
|
virDomainChrSerialTargetModelTypeToString;
|
||||||
virDomainChrSerialTargetTypeFromString;
|
virDomainChrSerialTargetTypeFromString;
|
||||||
virDomainChrSerialTargetTypeToString;
|
virDomainChrSerialTargetTypeToString;
|
||||||
virDomainChrSourceDefClear;
|
virDomainChrSourceDefClear;
|
||||||
|
@ -3479,6 +3479,25 @@ qemuDomainChrSerialTargetTypeToAddressType(int targetType)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
qemuDomainChrSerialTargetModelToTargetType(int targetModel)
|
||||||
|
{
|
||||||
|
switch ((virDomainChrSerialTargetModel) targetModel) {
|
||||||
|
case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_ISA_SERIAL:
|
||||||
|
return VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_ISA;
|
||||||
|
case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_USB_SERIAL:
|
||||||
|
return VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_USB;
|
||||||
|
case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_PCI_SERIAL:
|
||||||
|
return VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_PCI;
|
||||||
|
case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_NONE:
|
||||||
|
case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_LAST:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
qemuDomainChrTargetDefValidate(const virDomainDef *def,
|
qemuDomainChrTargetDefValidate(const virDomainDef *def,
|
||||||
const virDomainChrDef *chr)
|
const virDomainChrDef *chr)
|
||||||
@ -3515,6 +3534,28 @@ qemuDomainChrTargetDefValidate(const virDomainDef *def,
|
|||||||
case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_LAST:
|
case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_LAST:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Validate target model */
|
||||||
|
switch ((virDomainChrSerialTargetModel) chr->targetModel) {
|
||||||
|
case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_ISA_SERIAL:
|
||||||
|
case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_USB_SERIAL:
|
||||||
|
case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_PCI_SERIAL:
|
||||||
|
|
||||||
|
expected = qemuDomainChrSerialTargetModelToTargetType(chr->targetModel);
|
||||||
|
|
||||||
|
if (chr->targetType != expected) {
|
||||||
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
|
_("Target model '%s' requires target type '%s'"),
|
||||||
|
virDomainChrSerialTargetModelTypeToString(chr->targetModel),
|
||||||
|
virDomainChrSerialTargetTypeToString(expected));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_NONE:
|
||||||
|
case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_LAST:
|
||||||
|
break;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE:
|
case VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE:
|
||||||
|
Loading…
Reference in New Issue
Block a user