From nobody Mon Feb 9 22:18:48 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 205.139.110.120 as permitted sender) client-ip=205.139.110.120; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-1.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.120 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1599190924; cv=none; d=zohomail.com; s=zohoarc; b=ZJIqyB1PZAY9Iv2WSE8wouEYF9CPHYvnqEdF26RzhHpdRsEiqUsCMOnYWrGMO1tfx6e6/YNbAmCdZZT2S1VSjgomeUZiDl57wYY9kQJbLR/1BiJHCbJ7D1rZKtzBd3NP2jaIvRBYamcMzf3ZP6XN/lhzT8N7PZU2IrgToI8+gQA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1599190924; 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=lklo+k62qYCSD6g8ytKK1iwdHHrcKsrNXra7StHHE8E=; b=DXlKGJlrkvHiat5fSqQxKgOFZ858mWup0b9yNkoN7/kEuCqJK7SS9JWIcEs11QxHqp6fpIds6Xo+v85vb4T0lMotlU+Zl3Z5aRCplcYXzJls2P1AVOcerpAXGq+uWfkgbLbXLZB/OXoASVyvLrAmRuQ3lGY7mdF0ZUBftzK493I= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.120 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) by mx.zohomail.com with SMTPS id 1599190924723802.7193258967025; Thu, 3 Sep 2020 20:42:04 -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-334-r2FD7ogLNyWAME22oa07ng-1; Thu, 03 Sep 2020 23:42:00 -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 227581006719; Fri, 4 Sep 2020 03:41:52 +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 0055C5C26A; Fri, 4 Sep 2020 03:41:51 +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 C490C972F4; Fri, 4 Sep 2020 03:41:51 +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 0843fA64030584 for ; Thu, 3 Sep 2020 23:41:11 -0400 Received: by smtp.corp.redhat.com (Postfix) id C5398200BCF0; Fri, 4 Sep 2020 03:41:10 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast02.extmail.prod.ext.rdu2.redhat.com [10.11.55.18]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BBCF12018034 for ; Fri, 4 Sep 2020 03:41: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 A56068007A4 for ; Fri, 4 Sep 2020 03:41:07 +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-532-HHiI9DN-Mk-B3HpqlHrZfQ-1; Thu, 03 Sep 2020 23:41:03 -0400 Received: from localhost.localdomain (unknown [58.56.27.130]) by smtp4 (Coremail) with SMTP id JedpCgAHcNgStlFfYHYgCg--.1426S31; Fri, 04 Sep 2020 11:35:55 +0800 (CST) X-MC-Unique: r2FD7ogLNyWAME22oa07ng-1 X-MC-Unique: HHiI9DN-Mk-B3HpqlHrZfQ-1 From: Shi Lei To: libvir-list@redhat.com Subject: [RFCv2 29/46] conf: Generate virDomainGraphicsVNCDefFormatAttr Date: Fri, 4 Sep 2020 11:35:21 +0800 Message-Id: <20200904033538.418579-30-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--.1426S31 X-Coremail-Antispam: 1Uf129KBjvJXoW3WFy8JFW3WryfZr1UKFy5CFg_yoW3AF43pF 43XFyUtrW5Xrn3Cr4kGa1YgwsYkFyDWwnrAr90qw1j9rW3Gr4rZw1Iqry0gw1jgr12vr9a yFWfKw4jgw4jvrDanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0piAnY3UUUUU= X-Originating-IP: [58.56.27.130] X-CM-SenderInfo: pvklsz1hl6ztxvvfz0xxgvhudrp/1tbiDByVT1f11eRsigAAs- 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.4 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.79 on 10.5.11.16 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 | 164 ++++++++++++++++++++++++++--------------- src/conf/domain_conf.h | 14 ++-- 2 files changed, 114 insertions(+), 64 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 54b4da9..ebd8ac3 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -14363,9 +14363,9 @@ virDomainGraphicsVNCDefParseXMLHook(xmlNodePtr node= G_GNUC_UNUSED, void *parent G_GNUC_UNUSED, void *opaque, const char *port, + const char *autoport, const char *websocket G_GNUC_UNUSED, const char *websocketGenerated G_GNUC_= UNUSED, - const char *autoport, const char *sharePolicy G_GNUC_UNUSED) { unsigned int flags =3D *((unsigned int *) opaque); @@ -28049,6 +28049,110 @@ virDomainSpiceGLDefFormat(virBufferPtr buf, virDo= mainGraphicsDefPtr def) virBufferAddLit(buf, "/>\n"); } =20 +bool +virDomainGraphicsVNCDefCheckAttrHook(const virDomainGraphicsVNCDef *def G_= GNUC_UNUSED, + const void *parent, + void *opaque, + bool value) +{ + bool ret =3D false; + virDomainGraphicsDefPtr graphics =3D (virDomainGraphicsDefPtr) parent; + virDomainGraphicsListenDefPtr glisten =3D virDomainGraphicsGetListen(g= raphics, 0); + unsigned int flags =3D 0; + if (opaque) + flags =3D *((unsigned int *) opaque); + + if (!glisten) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("missing listen element for graphics")); + return false; + } + + switch (glisten->type) { + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET: + if (glisten->socket && + !((glisten->autoGenerated || glisten->fromConfig) && + (flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE))) { + ret =3D true; + } + break; + + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS: + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK: + /* Always output 'autoport' under these conditions */ + ret =3D true; + break; + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE: + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST: + break; + } + + return ret || value; +} + +int +virDomainGraphicsVNCDefFormatAttrHook(const virDomainGraphicsVNCDef *def, + const void *parent, + const void *opaque, + virBufferPtr portBuf, + virBufferPtr autoportBuf, + virBufferPtr websocketBuf, + virBufferPtr listenBuf, + virBufferPtr socketBuf) +{ + virDomainGraphicsDefPtr graphics =3D (virDomainGraphicsDefPtr) parent; + virDomainGraphicsListenDefPtr glisten =3D virDomainGraphicsGetListen(g= raphics, 0); + unsigned int flags =3D 0; + if (opaque) + flags =3D *((unsigned int *) opaque); + + if (!glisten) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("missing listen element for graphics")); + return -1; + } + + switch (glisten->type) { + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET: + /* To not break migration we shouldn't print the 'socket' attribute + * if it's auto-generated or if it's based on config option from + * qemu.conf. If the socket is provided by user we need to print = it + * into migratable XML. */ + if (glisten->socket && + !((glisten->autoGenerated || glisten->fromConfig) && + (flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE))) { + virBufferEscapeString(socketBuf, " socket=3D'%s'", glisten->so= cket); + } + break; + + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS: + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK: + if (def->port && + (!def->autoport || !(flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE))) + virBufferAsprintf(portBuf, " port=3D'%d'", + def->port); + else if (def->autoport) + virBufferAddLit(portBuf, " port=3D'-1'"); + + virBufferAsprintf(autoportBuf, " autoport=3D'%s'", + def->autoport ? "yes" : "no"); + + if (def->websocketGenerated && + (flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE)) + virBufferAddLit(websocketBuf, " websocket=3D'-1'"); + else if (def->websocket) + virBufferAsprintf(websocketBuf, " websocket=3D'%d'", def->webs= ocket); + + virDomainGraphicsListenDefFormatAddr(listenBuf, glisten, flags); + break; + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE: + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST: + break; + } + + return 0; +} + static int virDomainGraphicsDefFormat(virBufferPtr buf, virDomainGraphicsDefPtr def, @@ -28069,64 +28173,8 @@ virDomainGraphicsDefFormat(virBufferPtr buf, =20 switch (def->type) { case VIR_DOMAIN_GRAPHICS_TYPE_VNC: - if (!glisten) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("missing listen element for graphics")); + if (virDomainGraphicsVNCDefFormatAttr(buf, &def->data.vnc, def, &f= lags) < 0) return -1; - } - - switch (glisten->type) { - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET: - /* To not break migration we shouldn't print the 'socket' attr= ibute - * if it's auto-generated or if it's based on config option fr= om - * qemu.conf. If the socket is provided by user we need to pr= int it - * into migratable XML. */ - if (glisten->socket && - !((glisten->autoGenerated || glisten->fromConfig) && - (flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE))) { - virBufferEscapeString(buf, " socket=3D'%s'", glisten->sock= et); - } - break; - - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS: - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK: - if (def->data.vnc.port && - (!def->data.vnc.autoport || !(flags & VIR_DOMAIN_DEF_FORMA= T_INACTIVE))) - virBufferAsprintf(buf, " port=3D'%d'", - def->data.vnc.port); - else if (def->data.vnc.autoport) - virBufferAddLit(buf, " port=3D'-1'"); - - virBufferAsprintf(buf, " autoport=3D'%s'", - def->data.vnc.autoport ? "yes" : "no"); - - if (def->data.vnc.websocketGenerated && - (flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE)) - virBufferAddLit(buf, " websocket=3D'-1'"); - else if (def->data.vnc.websocket) - virBufferAsprintf(buf, " websocket=3D'%d'", def->data.vnc.= websocket); - - if (flags & VIR_DOMAIN_DEF_FORMAT_STATUS) - virBufferAsprintf(buf, " websocketGenerated=3D'%s'", - def->data.vnc.websocketGenerated ? "yes"= : "no"); - - virDomainGraphicsListenDefFormatAddr(buf, glisten, flags); - break; - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE: - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST: - break; - } - - if (def->data.vnc.keymap) - virBufferEscapeString(buf, " keymap=3D'%s'", - def->data.vnc.keymap); - - if (def->data.vnc.sharePolicy) - virBufferAsprintf(buf, " sharePolicy=3D'%s'", - virDomainGraphicsVNCSharePolicyTypeToString( - def->data.vnc.sharePolicy)); - - virDomainGraphicsAuthDefFormatAttr(buf, &def->data.vnc.auth, def, = &flags); break; =20 case VIR_DOMAIN_GRAPHICS_TYPE_SDL: diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index e262246..f4cc504 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1682,15 +1682,17 @@ struct _virDomainGraphicsSDLDef { /* genparse, ge= nformat:separate */ virTristateBool gl; /* xmlattr:gl/enable */ }; =20 -struct _virDomainGraphicsVNCDef { /* genparse:withhook */ - int port; /* xmlattr */ +struct _virDomainGraphicsVNCDef { /* genparse:withhook, genformat:separa= te */ + int port; /* xmlattr, formathook= */ bool portReserved; - int websocket; /* xmlattr */ - bool websocketGenerated; /* xmlattr */ - bool autoport; /* xmlattr */ + bool autoport; /* xmlattr, formathook= */ + int websocket; /* xmlattr, formathook= */ + bool websocketGenerated; /* xmlattr, formatflag= :%VIR_DOMAIN_DEF_FORMAT_STATUS */ + char *_listen; /* xmlattr:listen, for= mathook */ + char *_socket; /* xmlattr:socket, for= mathook */ char *keymap; /* xmlattr */ - virDomainGraphicsAuthDef auth; /* xmlgroup */ virDomainGraphicsVNCSharePolicy sharePolicy; /* xmlattr */ + virDomainGraphicsAuthDef auth; /* xmlgroup */ }; =20 struct _virDomainGraphicsRDPDef { --=20 2.25.1