Check the bus, type of the source device (tcp vs. spicevmc) and the device address visible in the guest. https://bugzilla.redhat.com/show_bug.cgi?id=1035128 --- src/conf/domain_conf.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 0af5be7..9f1c020 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -13693,6 +13693,42 @@ virDomainHubDefCheckABIStability(virDomainHubDefPtr src, return true; } + +static bool +virDomainRedirdevDefCheckABIStability(virDomainRedirdevDefPtr src, + virDomainRedirdevDefPtr dst) +{ + if (src->bus != dst->bus) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Target redirected device bus %s does not match " + "source %s"), + virDomainRedirdevBusTypeToString(dst->bus), + virDomainRedirdevBusTypeToString(src->bus)); + return false; + } + + switch ((enum virDomainRedirdevBus) src->bus) { + case VIR_DOMAIN_REDIRDEV_BUS_USB: + if (src->source.chr.type != dst->source.chr.type) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Target redirected device source type %s does " + "not match source device source type %s"), + virDomainChrTypeToString(dst->source.chr.type), + virDomainChrTypeToString(src->source.chr.type)); + return false; + } + break; + case VIR_DOMAIN_REDIRDEV_BUS_LAST: + break; + } + + if (!virDomainDeviceInfoCheckABIStability(&src->info, &dst->info)) + return false; + + return true; +} + + static bool virDomainRedirFilterDefCheckABIStability(virDomainRedirFilterDefPtr src, virDomainRedirFilterDefPtr dst) @@ -14133,6 +14169,20 @@ virDomainDefCheckABIStability(virDomainDefPtr src, if (!virDomainHubDefCheckABIStability(src->hubs[i], dst->hubs[i])) goto error; + if (src->nredirdevs != dst->nredirdevs) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Target domain redirected devices count %zu " + "does not match source %zu"), + dst->nconsoles, src->nconsoles); + goto error; + } + + for (i = 0; i < src->nredirdevs; i++) { + if (!virDomainRedirdevDefCheckABIStability(src->redirdevs[i], + dst->redirdevs[i])) + goto error; + } + if ((!src->redirfilter && dst->redirfilter) || (src->redirfilter && !dst->redirfilter)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, -- 1.8.3.2 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list