From c9123fbe85430dab5e737b20f5657aab650a5d45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1n=20Tomko?= Date: Wed, 2 Apr 2014 14:00:28 +0200 Subject: [PATCH] Add redirdevs to ABI stability check 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 0c7d4e4c3e..465bf84085 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -13699,6 +13699,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) @@ -14139,6 +14175,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, -- GitLab