From nobody Mon Feb 9 19:04:29 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 207.211.31.81 as permitted sender) client-ip=207.211.31.81; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-1.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 207.211.31.81 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1599190888; cv=none; d=zohomail.com; s=zohoarc; b=Yq/g2apXAKOWWpvDGQFqNlZuLIDzEZ/TZrOaLSWPochg0c1QldDT2iRlZ/2UJl/N7ZS+FY8sDDBV6Knwawa5r7rfFH2dK4qqSF96IPHVe7ppDTaMupjVwvENbIu9ehO3stbzr5Sfz//F3J5TVo7+BLZVUx27gUUqfG6TF5yO1GQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1599190888; h=Content-Type:Content-Transfer-Encoding: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=bBVz68ZVwnwmj2OQmNw2OH9ldZ3J+4+7nSAKzMNjXPg=; b=cYccThgETNuOAobkVTRJIXHnuopdxh6EyBQh3Klfp6TOTX76aIxQ1GnfNdeJLbG/3Gqhr8AiViK9z6aEAEaggu0G2Zo9pdLeokBhTog2YPHFiKlzmCRyIPb3axIR6lweI5wsNqeCENud9KJnac4htSzoZYPhrVKMyaU51TEXQ7Y= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 207.211.31.81 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from us-smtp-delivery-1.mimecast.com (us-smtp-2.mimecast.com [207.211.31.81]) by mx.zohomail.com with SMTPS id 1599190887893748.1194344403142; Thu, 3 Sep 2020 20:41:27 -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-319-jRZriDhsNkqx-CdCCpfXqw-1; Thu, 03 Sep 2020 23:41:24 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 5865085B67C; Fri, 4 Sep 2020 03:41:19 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 907011A7C8; Fri, 4 Sep 2020 03:41:18 +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 1BD6B180B656; Fri, 4 Sep 2020 03:41:13 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 0843fAlm030577 for ; Thu, 3 Sep 2020 23:41:11 -0400 Received: by smtp.corp.redhat.com (Postfix) id AC262117DB03; Fri, 4 Sep 2020 03:41:10 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast01.extmail.prod.ext.rdu2.redhat.com [10.11.55.17]) by smtp.corp.redhat.com (Postfix) with ESMTPS id A00A9117A978 for ; Fri, 4 Sep 2020 03:41:10 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-2.mimecast.com [207.211.31.81]) (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 629178F6E71 for ; Fri, 4 Sep 2020 03:41:09 +0000 (UTC) Received: from mail-m24147.qiye.163.com (mail-m24147.qiye.163.com [220.194.24.147]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-453-55YS8uIBMvy8ddQ87kMoKA-1; Thu, 03 Sep 2020 23:41:06 -0400 Received: from localhost.localdomain (unknown [58.56.27.130]) by smtp4 (Coremail) with SMTP id JedpCgAHcNgStlFfYHYgCg--.1426S40; Fri, 04 Sep 2020 11:35:57 +0800 (CST) X-MC-Unique: jRZriDhsNkqx-CdCCpfXqw-1 X-MC-Unique: 55YS8uIBMvy8ddQ87kMoKA-1 From: Shi Lei To: libvir-list@redhat.com Subject: [RFCv2 38/46] conf: Generate virDomainGraphicsSpiceDefFormatElem and virDomainGraphicsSpiceDefFormatAttr Date: Fri, 4 Sep 2020 11:35:30 +0800 Message-Id: <20200904033538.418579-39-shi_lei@massclouds.com> In-Reply-To: <20200904033538.418579-1-shi_lei@massclouds.com> References: <20200904033538.418579-1-shi_lei@massclouds.com> MIME-Version: 1.0 X-CM-TRANSID: JedpCgAHcNgStlFfYHYgCg--.1426S40 X-Coremail-Antispam: 1Uf129KBjvJXoW3tF1DGFyDXr47WF1UtF1rCrg_yoWkJFy7pF 9xZFWjqF4UZrsxGr48Was0gw43KFykXrW7Cr9aqw1j9r45Gr4kurWag34v9r4YkFsrZas5 ZFWSqw4UXw4jyFDanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0pRrgA3UUUUU= X-Originating-IP: [58.56.27.130] X-CM-SenderInfo: pvklsz1hl6ztxvvfz0xxgvhudrp/1tbiWR2VT1f4pw-zKQAAsD X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false; X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@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.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0.002 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Signed-off-by: Shi Lei --- src/conf/domain_conf.c | 206 ++++++++++++++++++----------------------- src/conf/domain_conf.h | 9 +- 2 files changed, 96 insertions(+), 119 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 20d731b..88e324e 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -27775,18 +27775,6 @@ virDomainGraphicsListenDefFormatAddr(virBufferPtr = buf, virBufferAsprintf(buf, " listen=3D'%s'", glisten->address); } =20 -static void -virDomainSpiceGLDefFormat(virBufferPtr buf, virDomainGraphicsDefPtr def) -{ - if (def->data.spice.gl =3D=3D VIR_TRISTATE_BOOL_ABSENT) - return; - - virBufferAsprintf(buf, "data.spice.gl)); - virBufferEscapeString(buf, " rendernode=3D'%s'", def->data.spice.rende= rnode); - virBufferAddLit(buf, "/>\n"); -} - bool virDomainGraphicsVNCDefCheckAttrHook(const virDomainGraphicsVNCDef *def G_= GNUC_UNUSED, const void *parent, @@ -27896,7 +27884,6 @@ virDomainGraphicsDefFormat(virBufferPtr buf, virDomainGraphicsDefPtr def, unsigned int flags) { - virDomainGraphicsListenDefPtr glisten =3D virDomainGraphicsGetListen(d= ef, 0); const char *type =3D virDomainGraphicsTypeToString(def->type); bool children =3D false; size_t i; @@ -27943,60 +27930,9 @@ virDomainGraphicsDefFormat(virBufferPtr buf, break; =20 case VIR_DOMAIN_GRAPHICS_TYPE_SPICE: - if (!glisten) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("missing listen element for spice graphics")); + if (virDomainGraphicsSpiceDefFormatAttr(buf, &def->data.spice, def= , &flags) < 0) return -1; - } - - switch (glisten->type) { - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS: - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK: - if (def->data.spice.port) - virBufferAsprintf(buf, " port=3D'%d'", - def->data.spice.port); - - if (def->data.spice.tlsPort) - virBufferAsprintf(buf, " tlsPort=3D'%d'", - def->data.spice.tlsPort); - - virBufferAsprintf(buf, " autoport=3D'%s'", - def->data.spice.autoport ? "yes" : "no"); - - virDomainGraphicsListenDefFormatAddr(buf, glisten, flags); - break; - - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE: - if (flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE) - virBufferAddStr(buf, " autoport=3D'no'"); - break; =20 - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET: - /* If socket is auto-generated based on config option we don't - * add any listen element into migratable XML because the orig= inal - * listen type is "address". - * We need to set autoport to make sure that libvirt on destin= ation - * will parse it as listen type "address", without autoport it= is - * parsed as listen type "none". */ - if ((flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE) && - glisten->fromConfig) { - virBufferAddStr(buf, " autoport=3D'yes'"); - } - break; - - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST: - break; - } - - if (def->data.spice.keymap) - virBufferEscapeString(buf, " keymap=3D'%s'", - def->data.spice.keymap); - - if (def->data.spice.defaultMode !=3D VIR_DOMAIN_GRAPHICS_SPICE_CHA= NNEL_MODE_ANY) - virBufferAsprintf(buf, " defaultMode=3D'%s'", - virDomainGraphicsSpiceChannelModeTypeToString(def->data.spic= e.defaultMode)); - - virDomainGraphicsAuthDefFormatAttr(buf, &def->data.spice.auth, def= , &flags); break; =20 case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS: @@ -28053,56 +27989,8 @@ virDomainGraphicsDefFormat(virBufferPtr buf, } =20 if (def->type =3D=3D VIR_DOMAIN_GRAPHICS_TYPE_SPICE) { - for (i =3D 0; i < VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_LAST; i++) { - int mode =3D def->data.spice.channels[i]; - if (mode =3D=3D VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_ANY) - continue; - - if (!children) { - virBufferAddLit(buf, ">\n"); - virBufferAdjustIndent(buf, 2); - children =3D true; - } - - virBufferAsprintf(buf, "\n", - virDomainGraphicsSpiceChannelNameTypeToStrin= g(i), - virDomainGraphicsSpiceChannelModeTypeToStrin= g(mode)); - } - if (!children && (def->data.spice.image || def->data.spice.jpeg || - def->data.spice.zlib || def->data.spice.playback= || - def->data.spice.streaming || def->data.spice.cop= ypaste || - def->data.spice.mousemode || def->data.spice.fil= etransfer || - def->data.spice.gl)) { - virBufferAddLit(buf, ">\n"); - virBufferAdjustIndent(buf, 2); - children =3D true; - } - if (def->data.spice.image) - virBufferAsprintf(buf, "\n", - virDomainGraphicsSpiceImageCompressionTypeTo= String(def->data.spice.image)); - if (def->data.spice.jpeg) - virBufferAsprintf(buf, "\n", - virDomainGraphicsSpiceJpegCompressionTypeToS= tring(def->data.spice.jpeg)); - if (def->data.spice.zlib) - virBufferAsprintf(buf, "\n", - virDomainGraphicsSpiceZlibCompressionTypeToS= tring(def->data.spice.zlib)); - if (def->data.spice.playback) - virBufferAsprintf(buf, "\n", - virTristateSwitchTypeToString(def->data.spic= e.playback)); - if (def->data.spice.streaming) - virBufferAsprintf(buf, "\n", - virDomainGraphicsSpiceStreamingModeTypeToStr= ing(def->data.spice.streaming)); - if (def->data.spice.mousemode) - virBufferAsprintf(buf, "\n", - virDomainGraphicsSpiceMouseModeTypeToString(= def->data.spice.mousemode)); - if (def->data.spice.copypaste) - virBufferAsprintf(buf, "\n", - virTristateBoolTypeToString(def->data.spice.= copypaste)); - if (def->data.spice.filetransfer) - virBufferAsprintf(buf, "\n", - virTristateBoolTypeToString(def->data.spice.= filetransfer)); - - virDomainSpiceGLDefFormat(buf, def); + if (virDomainGraphicsSpiceDefFormatElem(buf, &def->data.spice, def= , NULL) < 0) + return -1; } =20 if (children) { @@ -32694,6 +32582,45 @@ virDomainGraphicsRDPDefCheckAttrHook(const virDoma= inGraphicsRDPDef *def G_GNUC_U } =20 =20 +bool +virDomainGraphicsSpiceDefCheckAttrHook(const virDomainGraphicsSpiceDef *de= f G_GNUC_UNUSED, + const void *parent, + void *opaque, + bool value) +{ + bool ret =3D false; + virDomainGraphicsDefPtr graphic =3D (virDomainGraphicsDefPtr) parent; + virDomainGraphicsListenDefPtr glisten =3D &graphic->listens[0]; + unsigned int flags =3D 0; + if (opaque) + flags =3D *((unsigned int *) opaque); + + switch (glisten->type) { + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS: + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK: + ret =3D true; + break; + + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE: + if (flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE) + ret =3D true; + break; + + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET: + if ((flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE) && + glisten->fromConfig) { + ret =3D true; + } + break; + + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST: + break; + } + + return ret || value; +} + + int virDomainGraphicsRDPDefFormatAttrHook(const virDomainGraphicsRDPDef *def G= _GNUC_UNUSED, const void *parent, @@ -32707,5 +32634,54 @@ virDomainGraphicsRDPDefFormatAttrHook(const virDom= ainGraphicsRDPDef *def G_GNUC_ flags =3D *((unsigned int *) opaque); =20 virDomainGraphicsListenDefFormatAddr(listenBuf, glisten, flags); + + return 0; +} + + +int +virDomainGraphicsSpiceDefFormatAttrHook(const virDomainGraphicsSpiceDef *d= ef, + const void *parent, + const void *opaque, + virBufferPtr autoportBuf, + virBufferPtr listenBuf) +{ + virDomainGraphicsDefPtr graphic =3D (virDomainGraphicsDefPtr) parent; + virDomainGraphicsListenDefPtr glisten =3D &graphic->listens[0]; + unsigned int flags =3D 0; + if (opaque) + flags =3D *((unsigned int *) opaque); + + switch (glisten->type) { + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS: + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK: + virBufferAsprintf(autoportBuf, " autoport=3D'%s'", + def->autoport ? "yes" : "no"); + + virDomainGraphicsListenDefFormatAddr(listenBuf, glisten, flags); + break; + + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE: + if (flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE) + virBufferAddStr(autoportBuf, " autoport=3D'no'"); + break; + + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET: + /* If socket is auto-generated based on config option we don't + * add any listen element into migratable XML because the original + * listen type is "address". + * We need to set autoport to make sure that libvirt on destination + * will parse it as listen type "address", without autoport it is + * parsed as listen type "none". */ + if ((flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE) && + glisten->fromConfig) { + virBufferAddStr(autoportBuf, " autoport=3D'yes'"); + } + break; + + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST: + break; + } + return 0; } diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index f27f429..ad84fe3 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1716,27 +1716,28 @@ struct _virSpiceChannelDef { /* genp= arse, genformat */ virDomainGraphicsSpiceChannelMode mode; /* xmlattr */ }; =20 -struct _virDomainGraphicsSpiceDef { /* genparse:concisehook */ +struct _virDomainGraphicsSpiceDef { /* genparse:concisehook, genformat= :separate */ int port; /* xmlattr */ int tlsPort; /* xmlattr */ bool portReserved; bool tlsPortReserved; - virDomainGraphicsSpiceMouseMode mousemode; /* xmlattr:mouse/mode */ char *keymap; /* xmlattr */ + bool autoport; /* xmlattr, formathook */ + char *_listen; /* xmlattr:listen, formathook */ + virDomainGraphicsSpiceChannelMode defaultMode; /* xmlattr */ virDomainGraphicsAuthDef auth; /* xmlgroup */ - bool autoport; /* xmlattr */ =20 /* The shadow member _channels helps to parse channels. */ size_t n_channels; virSpiceChannelDefPtr _channels; /* xmlelem:channel, array */ int channels[VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_LAST]; =20 - virDomainGraphicsSpiceChannelMode defaultMode; /* xmlattr */ virDomainGraphicsSpiceImageCompression image; /* xmlattr:image/compr= ession */ virDomainGraphicsSpiceJpegCompression jpeg; /* xmlattr:jpeg/compre= ssion */ virDomainGraphicsSpiceZlibCompression zlib; /* xmlattr:zlib/compre= ssion */ virTristateSwitch playback; /* xmlattr:playback/co= mpression */ virDomainGraphicsSpiceStreamingMode streaming; /* xmlattr:streaming/m= ode */ + virDomainGraphicsSpiceMouseMode mousemode; /* xmlattr:mouse/mode = */ virTristateBool copypaste; /* xmlattr:clipboard/copypaste */ virTristateBool filetransfer; /* xmlattr:filetransfer/enable */ virTristateBool gl; /* xmlattr:gl/enable */ --=20 2.25.1