From nobody Sun Feb 8 06:49:30 2026 Delivered-To: importer@patchew.org Received-SPF: none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; spf=none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1709221005606341.23879270828945; Thu, 29 Feb 2024 07:36:45 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 8D0C91824; Thu, 29 Feb 2024 10:36:44 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 9E39C1B6A; Thu, 29 Feb 2024 10:28:27 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 3F5A7187D; Thu, 29 Feb 2024 10:27:53 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id C99111877 for ; Thu, 29 Feb 2024 10:27:51 -0500 (EST) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-652-qNx0PRa5MzqhH5Eh1AZFtA-1; Thu, 29 Feb 2024 10:27:50 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id F3EDB1066143 for ; Thu, 29 Feb 2024 15:27:49 +0000 (UTC) Received: from fedora.redhat.com (unknown [10.45.226.67]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5B3342166B5E for ; Thu, 29 Feb 2024 15:27:49 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.4 X-MC-Unique: qNx0PRa5MzqhH5Eh1AZFtA-1 From: =?UTF-8?q?J=C3=A1n=20Tomko?= To: devel@lists.libvirt.org Subject: [libvirt PATCH 2/5] libvirt: Introduce virDomainGraphicsReload API Date: Thu, 29 Feb 2024 16:23:57 +0100 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.6 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Message-ID-Hash: 7XFAO7OFG5EYEWYTLR2DCUHH732YA4EZ X-Message-ID-Hash: 7XFAO7OFG5EYEWYTLR2DCUHH732YA4EZ X-MailFrom: jtomko@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZM-MESSAGEID: 1709221007610100001 From: Zheng Yan The new virDomainGraphicsReload API is used to make the domain reload its certificates without restart, and avoid service interruption. Currently, only QEMU VNC TLS certificates are supported, but parameters and flags are also reserved for subsequent scenarios. To reload QEMU VNC TLS certificates as an example, we can call: virDomainGraphicsReload(domain, 0, 0); Then the specified QMP message would be send to QEMU: {"execute": "display-reload", "arguments":{"type": "vnc", "tls-certs": true= }} Signed-off-by: Zheng Yan Signed-off-by: J=C3=A1n Tomko --- include/libvirt/libvirt-domain.h | 18 ++++++++++++ src/driver-hypervisor.h | 6 ++++ src/libvirt-domain.c | 50 ++++++++++++++++++++++++++++++++ src/libvirt_public.syms | 5 ++++ 4 files changed, 79 insertions(+) diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-dom= ain.h index 30cce85b29..2f5b01bbfe 100644 --- a/include/libvirt/libvirt-domain.h +++ b/include/libvirt/libvirt-domain.h @@ -6507,4 +6507,22 @@ int virDomainFDAssociate(virDomainPtr domain, int *fds, unsigned int flags); =20 +/** + * virDomainGraphicsReloadType: + * + * Since: 10.2.0 + */ +typedef enum { + VIR_DOMAIN_GRAPHICS_RELOAD_TYPE_ANY =3D 0, /* reload any graphics know= n to libvirt (Since: 10.2.0) */ + VIR_DOMAIN_GRAPHICS_RELOAD_TYPE_VNC =3D 1, /* reload vnc graphics (Sin= ce: 10.2.0) */ +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_GRAPHICS_RELOAD_TYPE_LAST /* (Since: 10.2.0) */ +# endif +} virDomainGraphicsReloadType; + +int +virDomainGraphicsReload(virDomainPtr domain, + unsigned int type, + unsigned int flags); + #endif /* LIBVIRT_DOMAIN_H */ diff --git a/src/driver-hypervisor.h b/src/driver-hypervisor.h index 5219344b72..4ce8da078d 100644 --- a/src/driver-hypervisor.h +++ b/src/driver-hypervisor.h @@ -1448,6 +1448,11 @@ typedef int int *fds, unsigned int flags); =20 +typedef int +(*virDrvDomainGraphicsReload)(virDomainPtr domain, + unsigned int type, + unsigned int flags); + typedef struct _virHypervisorDriver virHypervisorDriver; =20 /** @@ -1720,4 +1725,5 @@ struct _virHypervisorDriver { virDrvDomainGetMessages domainGetMessages; virDrvDomainStartDirtyRateCalc domainStartDirtyRateCalc; virDrvDomainFDAssociate domainFDAssociate; + virDrvDomainGraphicsReload domainGraphicsReload; }; diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c index 83abad251e..5a45b16275 100644 --- a/src/libvirt-domain.c +++ b/src/libvirt-domain.c @@ -14118,3 +14118,53 @@ virDomainFDAssociate(virDomainPtr domain, virDispatchError(conn); return -1; } + + +/** + * virDomainGraphicsReload: + * @domain: a domain object + * @type: graphics type; from the virDomainGraphicsReloadType enum + * @flags: extra flags; not used yet, so callers should always pass 0 + * + * Reload domain's graphics. + * + * Returns 0 in case of success, -1 otherwise. + * + * Since: 10.2.0 + */ +int +virDomainGraphicsReload(virDomainPtr domain, + unsigned int type, + unsigned int flags) +{ + virConnectPtr conn; + + VIR_DOMAIN_DEBUG(domain, "type=3D%u, flags=3D0x%x", type, flags); + + virResetLastError(); + + virCheckDomainReturn(domain, -1); + conn =3D domain->conn; + virCheckReadOnlyGoto(conn->flags, error); + + if (type >=3D VIR_DOMAIN_GRAPHICS_RELOAD_TYPE_LAST) { + virReportInvalidArg(type, + _("type must be less than %1$d"), + VIR_DOMAIN_GRAPHICS_RELOAD_TYPE_LAST); + goto error; + } + + if (conn->driver->domainGraphicsReload) { + int ret; + ret =3D conn->driver->domainGraphicsReload(domain, type, flags); + if (ret < 0) + goto error; + return ret; + } + + virReportUnsupportedError(); + + error: + virDispatchError(domain->conn); + return -1; +} diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms index 0304b8f824..7a3492d9d7 100644 --- a/src/libvirt_public.syms +++ b/src/libvirt_public.syms @@ -943,4 +943,9 @@ LIBVIRT_10.1.0 { virNodeDeviceUpdate; } LIBVIRT_9.7.0; =20 +LIBVIRT_10.2.0 { + global: + virDomainGraphicsReload; +} LIBVIRT_10.1.0; + # .... define new API here using predicted next version number .... --=20 2.43.2 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org