From nobody Sun Feb 8 05:54:49 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 216.205.24.74 as permitted sender) client-ip=216.205.24.74; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-74.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.74 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1585258360; cv=none; d=zohomail.com; s=zohoarc; b=UkQ5VujhEvA3ltWu7dxJS5RtZaJvDphX2ktg0UpIQuFVzKP5H2BKNRhD1sOxdnZ1gcoC16kcjmQSpNP9TQ6DJK6mm07DGZvj78Qaq0gdQCeYIh6zhVCwkXkva9ZseRqrh2ltcph1f4PKpS7ofrdtx1ZJQ70pPccSl5pTRC88CvI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1585258360; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=B1497Yy6TLCGMenWFQw4pOy8tBq1rrsQbrYDowI/hJ8=; b=hl+wQCXnawf/8re7oJezLjyxP2kAp/cr08mm6+yL1m5wzBDMu6gcJ1+StHPXrabHvzSCJYFL4UfqMWGyGdyzna/cvOfBc4N9iV+cacUtw8Dh/2sADZ3YNfphe3Qtj7/ksXN10axIIWnJVBZtkNHqAMDj1OtIBnF4LfBVPAO30gc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.74 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-74.mimecast.com (us-smtp-delivery-74.mimecast.com [216.205.24.74]) by mx.zohomail.com with SMTPS id 1585258359996977.566922903103; Thu, 26 Mar 2020 14:32:39 -0700 (PDT) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-299-g7JWk8dEPf6OccaDhusLyQ-1; Thu, 26 Mar 2020 17:32:22 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 0BCA5107ACCC; Thu, 26 Mar 2020 21:32:17 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id CE9625C1D8; Thu, 26 Mar 2020 21:32:16 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 6F5B68A042; Thu, 26 Mar 2020 21:32:16 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 02QLW7O0010324 for ; Thu, 26 Mar 2020 17:32:07 -0400 Received: by smtp.corp.redhat.com (Postfix) id 602192037E4F; Thu, 26 Mar 2020 21:32:07 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast04.extmail.prod.ext.rdu2.redhat.com [10.11.55.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 58E842026D67 for ; Thu, 26 Mar 2020 21:32:07 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 39674101A55F for ; Thu, 26 Mar 2020 21:32:07 +0000 (UTC) Received: from mail-qk1-f180.google.com (mail-qk1-f180.google.com [209.85.222.180]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-402-dNl2izaSOHqRTK-LBROgPA-1; Thu, 26 Mar 2020 17:32:00 -0400 Received: by mail-qk1-f180.google.com with SMTP id c145so8637635qke.12; Thu, 26 Mar 2020 14:31:59 -0700 (PDT) Received: from rekt.redhat.com ([2804:431:c7c6:e1ce:90c:c960:468:c347]) by smtp.gmail.com with ESMTPSA id x37sm2357719qtc.90.2020.03.26.14.31.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Mar 2020 14:31:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1585258358; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=B1497Yy6TLCGMenWFQw4pOy8tBq1rrsQbrYDowI/hJ8=; b=fs6FYZWZd364oEhtZJfsiVFXc/hRpXAgebhjS08AyTTb4qWM90JxQZrPCMQUaIRTCR55JK HvAdO6BeeP7LPUEnmLeKNTJoLD4aw5v/BYLIiRk0Sy59fh4sannDoi7y/+3VxFgBrxMtux iiZwCzIGPizI2D0iB5cq5RWHJT1ejpc= X-MC-Unique: g7JWk8dEPf6OccaDhusLyQ-1 X-MC-Unique: dNl2izaSOHqRTK-LBROgPA-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=gI7e4fQ+oK3GskpCd2HeWkFbnrNEeyJYif8kLM98cNU=; b=MUcP0fB24GXOIIGtyh10gR4CcbbY1wR43hFvkEY6yhBTF7bLMYk9VLYNSAup8+NXSI ohSyQvC61qmYzmcv3SEOMCLK72q3626AxLNrNjve+XslPpKp9HEe+MRyoKbXKLg1F7KY EwjMpTJjrYmlEqYlD5J5+Qr1F9K3+zHySv51Eb8PlDse/R+vg/zHn+tnQRwIcmkyWuax YcSA+ZoNRYuQ1uZHksRo5f3U+vnvzNDien3w9Or4+TK5ethI3XEekNzB3ciEjyqJWtK3 PVB8yhaXNSNXTvZIVgaFOl5Wwi9ASaf99rHn5NpIYxPIBccHGwgPyjGeEwbfjpxdwdag roDQ== X-Gm-Message-State: ANhLgQ1OF/dK2oKbAwhGrYDInsPBEejt8p68k/uFdJ53aN1tpRA/Z3RJ PEqtJzVfakDFdupcfyPzcr8PGs+r X-Google-Smtp-Source: ADFU+vv3Mz21Vs2tUog1XxqcX2hCZQagYqniw6Bprw+IVXWkT7bHyXtubYxFuB8/6p571ssV8NmZdw== X-Received: by 2002:a37:9c07:: with SMTP id f7mr11107474qke.349.1585258319024; Thu, 26 Mar 2020 14:31:59 -0700 (PDT) From: Daniel Henrique Barboza To: libvir-list@redhat.com Subject: [PATCH 11/15] qemu: move qemuDomainDeviceDefValidateGraphics() to qemu_validate.c Date: Thu, 26 Mar 2020 18:31:21 -0300 Message-Id: <20200326213125.2306013-12-danielhb413@gmail.com> In-Reply-To: <20200326213125.2306013-1-danielhb413@gmail.com> References: <20200326213125.2306013-1-danielhb413@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-MIME-Autoconverted: from quoted-printable to 8bit by lists01.pubmisc.prod.ext.phx2.redhat.com id 02QLW7O0010324 X-loop: libvir-list@redhat.com Cc: Daniel Henrique Barboza , pkrempa@redhat.com, crobinso@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" Signed-off-by: Daniel Henrique Barboza Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_domain.c | 177 +-------------------------------------- src/qemu/qemu_validate.c | 175 ++++++++++++++++++++++++++++++++++++++ src/qemu/qemu_validate.h | 5 ++ 3 files changed, 181 insertions(+), 176 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 522edb8274..ca9e642632 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -5521,181 +5521,6 @@ qemuDomainDeviceDefValidateTPM(virDomainTPMDef *tpm, } =20 =20 -static int -qemuDomainDeviceDefValidateSPICEGraphics(const virDomainGraphicsDef *graph= ics, - virQEMUDriverPtr driver, - virQEMUCapsPtr qemuCaps) -{ - g_autoptr(virQEMUDriverConfig) cfg =3D virQEMUDriverGetConfig(driver); - virDomainGraphicsListenDefPtr glisten =3D NULL; - int tlsPort =3D graphics->data.spice.tlsPort; - - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("spice graphics are not supported with this QEMU"= )); - return -1; - } - - glisten =3D virDomainGraphicsGetListen((virDomainGraphicsDefPtr)graphi= cs, 0); - if (!glisten) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("missing listen element")); - return -1; - } - - switch (glisten->type) { - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET: - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE_UNIX)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("unix socket for spice graphics are not suppo= rted " - "with this QEMU")); - return -1; - } - break; - - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS: - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK: - if (tlsPort > 0 && !cfg->spiceTLS) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("spice TLS port set in XML configuration, " - "but TLS is disabled in qemu.conf")); - return -1; - } - break; - - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE: - break; - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST: - break; - } - - if (graphics->data.spice.filetransfer =3D=3D VIR_TRISTATE_BOOL_NO && - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE_FILE_XFER_DISABLE)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("This QEMU can't disable file transfers throu= gh spice")); - return -1; - } - - if (graphics->data.spice.gl =3D=3D VIR_TRISTATE_BOOL_YES) { - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE_GL)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("This QEMU doesn't support spice OpenGL")); - return -1; - } - - if (graphics->data.spice.rendernode && - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE_RENDERNODE)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("This QEMU doesn't support spice OpenGL rende= rnode")); - return -1; - } - } - - return 0; -} - - -static int -qemuDomainDeviceDefValidateGraphics(const virDomainGraphicsDef *graphics, - const virDomainDef *def, - virQEMUDriverPtr driver, - virQEMUCapsPtr qemuCaps) -{ - bool have_egl_headless =3D false; - size_t i; - - for (i =3D 0; i < def->ngraphics; i++) { - if (def->graphics[i]->type =3D=3D VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEA= DLESS) { - have_egl_headless =3D true; - break; - } - } - - /* Only VNC and SPICE can be paired with egl-headless, the other types - * either don't make sense to pair with egl-headless or aren't even - * supported by QEMU. - */ - if (have_egl_headless) { - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_EGL_HEADLESS)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("egl-headless display is not supported with t= his " - "QEMU binary")); - return -1; - } - - if (graphics->type !=3D VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS && - graphics->type !=3D VIR_DOMAIN_GRAPHICS_TYPE_VNC && - graphics->type !=3D VIR_DOMAIN_GRAPHICS_TYPE_SPICE) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("graphics type 'egl-headless' is only support= ed " - "with one of: 'vnc', 'spice' graphics types")= ); - return -1; - } - - /* '-spice gl=3Don' and '-display egl-headless' are mutually - * exclusive - */ - if (graphics->type =3D=3D VIR_DOMAIN_GRAPHICS_TYPE_SPICE && - graphics->data.spice.gl =3D=3D VIR_TRISTATE_BOOL_YES) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("multiple OpenGL displays are not supported " - "by QEMU")); - return -1; - } - } - - switch (graphics->type) { - case VIR_DOMAIN_GRAPHICS_TYPE_SDL: - if (graphics->data.sdl.gl !=3D VIR_TRISTATE_BOOL_ABSENT) { - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SDL_GL)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("OpenGL for SDL is not supported with thi= s QEMU " - "binary")); - return -1; - } - } - break; - - case VIR_DOMAIN_GRAPHICS_TYPE_VNC: - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VNC)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("vnc graphics are not supported with this QEM= U")); - return -1; - } - break; - - case VIR_DOMAIN_GRAPHICS_TYPE_SPICE: - if (qemuDomainDeviceDefValidateSPICEGraphics(graphics, driver, - qemuCaps) < 0) - return -1; - - break; - - case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS: - if (graphics->data.egl_headless.rendernode && - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_EGL_HEADLESS_RENDERNODE)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("This QEMU doesn't support OpenGL rendernode " - "with egl-headless graphics type")); - return -1; - } - - break; - case VIR_DOMAIN_GRAPHICS_TYPE_RDP: - case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP: - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("unsupported graphics type '%s'"), - virDomainGraphicsTypeToString(graphics->type)); - return -1; - case VIR_DOMAIN_GRAPHICS_TYPE_LAST: - default: - return -1; - } - - return 0; -} - - static int qemuDomainDeviceDefValidateInput(const virDomainInputDef *input, const virDomainDef *def, @@ -6098,7 +5923,7 @@ qemuDomainDeviceDefValidate(const virDomainDeviceDef = *dev, break; =20 case VIR_DOMAIN_DEVICE_GRAPHICS: - ret =3D qemuDomainDeviceDefValidateGraphics(dev->data.graphics, de= f, + ret =3D qemuValidateDomainDeviceDefGraphics(dev->data.graphics, de= f, driver, qemuCaps); break; =20 diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index f8228f3491..5438431e93 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -2718,3 +2718,178 @@ qemuValidateDomainDeviceDefController(const virDoma= inControllerDef *controller, =20 return ret; } + + +static int +qemuValidateDomainDeviceDefSPICEGraphics(const virDomainGraphicsDef *graph= ics, + virQEMUDriverPtr driver, + virQEMUCapsPtr qemuCaps) +{ + g_autoptr(virQEMUDriverConfig) cfg =3D virQEMUDriverGetConfig(driver); + virDomainGraphicsListenDefPtr glisten =3D NULL; + int tlsPort =3D graphics->data.spice.tlsPort; + + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("spice graphics are not supported with this QEMU"= )); + return -1; + } + + glisten =3D virDomainGraphicsGetListen((virDomainGraphicsDefPtr)graphi= cs, 0); + if (!glisten) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("missing listen element")); + return -1; + } + + switch (glisten->type) { + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET: + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE_UNIX)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("unix socket for spice graphics are not suppo= rted " + "with this QEMU")); + return -1; + } + break; + + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS: + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK: + if (tlsPort > 0 && !cfg->spiceTLS) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("spice TLS port set in XML configuration, " + "but TLS is disabled in qemu.conf")); + return -1; + } + break; + + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE: + break; + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST: + break; + } + + if (graphics->data.spice.filetransfer =3D=3D VIR_TRISTATE_BOOL_NO && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE_FILE_XFER_DISABLE)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("This QEMU can't disable file transfers throu= gh spice")); + return -1; + } + + if (graphics->data.spice.gl =3D=3D VIR_TRISTATE_BOOL_YES) { + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE_GL)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("This QEMU doesn't support spice OpenGL")); + return -1; + } + + if (graphics->data.spice.rendernode && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE_RENDERNODE)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("This QEMU doesn't support spice OpenGL rende= rnode")); + return -1; + } + } + + return 0; +} + + +int +qemuValidateDomainDeviceDefGraphics(const virDomainGraphicsDef *graphics, + const virDomainDef *def, + virQEMUDriverPtr driver, + virQEMUCapsPtr qemuCaps) +{ + bool have_egl_headless =3D false; + size_t i; + + for (i =3D 0; i < def->ngraphics; i++) { + if (def->graphics[i]->type =3D=3D VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEA= DLESS) { + have_egl_headless =3D true; + break; + } + } + + /* Only VNC and SPICE can be paired with egl-headless, the other types + * either don't make sense to pair with egl-headless or aren't even + * supported by QEMU. + */ + if (have_egl_headless) { + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_EGL_HEADLESS)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("egl-headless display is not supported with t= his " + "QEMU binary")); + return -1; + } + + if (graphics->type !=3D VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS && + graphics->type !=3D VIR_DOMAIN_GRAPHICS_TYPE_VNC && + graphics->type !=3D VIR_DOMAIN_GRAPHICS_TYPE_SPICE) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("graphics type 'egl-headless' is only support= ed " + "with one of: 'vnc', 'spice' graphics types")= ); + return -1; + } + + /* '-spice gl=3Don' and '-display egl-headless' are mutually + * exclusive + */ + if (graphics->type =3D=3D VIR_DOMAIN_GRAPHICS_TYPE_SPICE && + graphics->data.spice.gl =3D=3D VIR_TRISTATE_BOOL_YES) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("multiple OpenGL displays are not supported " + "by QEMU")); + return -1; + } + } + + switch (graphics->type) { + case VIR_DOMAIN_GRAPHICS_TYPE_SDL: + if (graphics->data.sdl.gl !=3D VIR_TRISTATE_BOOL_ABSENT) { + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SDL_GL)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("OpenGL for SDL is not supported with thi= s QEMU " + "binary")); + return -1; + } + } + break; + + case VIR_DOMAIN_GRAPHICS_TYPE_VNC: + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VNC)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("vnc graphics are not supported with this QEM= U")); + return -1; + } + break; + + case VIR_DOMAIN_GRAPHICS_TYPE_SPICE: + if (qemuValidateDomainDeviceDefSPICEGraphics(graphics, driver, + qemuCaps) < 0) + return -1; + + break; + + case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS: + if (graphics->data.egl_headless.rendernode && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_EGL_HEADLESS_RENDERNODE)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("This QEMU doesn't support OpenGL rendernode " + "with egl-headless graphics type")); + return -1; + } + + break; + case VIR_DOMAIN_GRAPHICS_TYPE_RDP: + case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP: + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("unsupported graphics type '%s'"), + virDomainGraphicsTypeToString(graphics->type)); + return -1; + case VIR_DOMAIN_GRAPHICS_TYPE_LAST: + default: + return -1; + } + + return 0; +} diff --git a/src/qemu/qemu_validate.h b/src/qemu/qemu_validate.h index 85efa9354f..3b34cd55a2 100644 --- a/src/qemu/qemu_validate.h +++ b/src/qemu/qemu_validate.h @@ -24,6 +24,7 @@ =20 #include "domain_conf.h" #include "qemu_capabilities.h" +#include "qemu_conf.h" =20 int qemuValidateDomainDef(const virDomainDef *def, void *opaque); int qemuValidateDomainDeviceDefDisk(const virDomainDiskDef *disk, @@ -51,3 +52,7 @@ int qemuValidateDomainDeviceDefVideo(const virDomainVideo= Def *video, int qemuValidateDomainDeviceDefController(const virDomainControllerDef *co= ntroller, const virDomainDef *def, virQEMUCapsPtr qemuCaps); +int qemuValidateDomainDeviceDefGraphics(const virDomainGraphicsDef *graphi= cs, + const virDomainDef *def, + virQEMUDriverPtr driver, + virQEMUCapsPtr qemuCaps); --=20 2.25.1