<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        text-align:justify;
        text-justify:inter-ideograph;
        font-size:10.5pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
/* Page Definitions */
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="ZH-CN" link="#0563C1" vlink="#954F72" style="text-justify-trim:punctuation">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US">Introduce a new virDomainReloadTLSCertificates API for notify domain<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">reload its certificates without restart, and avoid service interruption.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Take reload QEMU VNC TLS certificates as an example, we can call:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">  virDomainReloadTLSCertificates(dom, VIR_DOMAIN_TLS_CERT_GRAPHICS_VNC)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Then the specified QMP message would be send to QEMU:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">{"execute": "display-reload", "arguments":{"type": "vnc", "tls-certs": true}}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Refers:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">https://gitlab.com/qemu-project/qemu/-/commit/9cc07651655ee86eca41059f5ead8c4e5607c734<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">---<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">include/libvirt/libvirt-domain.h | 17 ++++++++++++++++<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">src/driver-hypervisor.h          |  5 +++++<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">src/libvirt-domain.c             | 33 ++++++++++++++++++++++++++++++++<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">src/qemu/qemu_driver.c           | 11 +++++++++++<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">src/qemu/qemu_hotplug.c          | 21 ++++++++++++++++++++<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">src/qemu/qemu_hotplug.h          |  4 ++++<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">src/qemu/qemu_monitor.c          | 10 ++++++++++<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">src/qemu/qemu_monitor.h          |  3 +++<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">src/qemu/qemu_monitor_json.c     | 22 +++++++++++++++++++++<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">src/qemu/qemu_monitor_json.h     |  3 +++<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">10 files changed, 129 insertions(+)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">index e99bfb7654..aeb33d69d9 100644<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">--- a/include/libvirt/libvirt-domain.h<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+++ b/include/libvirt/libvirt-domain.h<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -5152,4 +5152,21 @@ int virDomainStartDirtyRateCalc(virDomainPtr domain,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                                 int seconds,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                                 unsigned int flags);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+/**<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+ * virDomainTLSCertificaType:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+ *<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+ * the used scene of TLS certificates for doamin.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+ */<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+typedef enum {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    VIR_DOMAIN_TLS_CERT_GRAPHICS_VNC      = 0,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    VIR_DOMAIN_TLS_CERT_GRAPHICS_SPICE    = 1,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    VIR_DOMAIN_TLS_CERT_LAST<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+} virDomainTLSCertificaType;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+int<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+virDomainReloadTLSCertificates(virDomainPtr domain,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+                               unsigned int type);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#endif /* LIBVIRT_DOMAIN_H */<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">diff --git a/src/driver-hypervisor.h b/src/driver-hypervisor.h<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">index d642af8a37..8de2bc4137 100644<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">--- a/src/driver-hypervisor.h<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+++ b/src/driver-hypervisor.h<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -1410,6 +1410,10 @@ typedef int<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                                   int seconds,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                                   unsigned int flags);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+typedef int<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+(*virDrvDomainReloadTLSCertificates)(virDomainPtr domain,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+                                     unsigned int type);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">typedef struct _virHypervisorDriver virHypervisorDriver;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> /**<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -1676,4 +1680,5 @@ struct _virHypervisorDriver {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">     virDrvDomainAuthorizedSSHKeysSet domainAuthorizedSSHKeysSet;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">     virDrvDomainGetMessages domainGetMessages;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">     virDrvDomainStartDirtyRateCalc domainStartDirtyRateCalc;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    virDrvDomainReloadTLSCertificates domainiReloadTLSCertificates;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">};<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">index 42c75f6cc5..fb9e5ec2d1 100644<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">--- a/src/libvirt-domain.c<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+++ b/src/libvirt-domain.c<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -13218,3 +13218,36 @@ virDomainStartDirtyRateCalc(virDomainPtr domain,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">     virDispatchError(conn);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">     return -1;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+/**<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+ * virDomainReloadTLSCertificates:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+ * @domain: a domain object.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+ * @type: a value of virDomainTLSCertificaType<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+ *<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+ * Notify domain reload its certificates with specified 'type'.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+ *<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+ * Returns 0 in case of success, -1 otherwise .<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+ */<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+int<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+virDomainReloadTLSCertificates(virDomainPtr domain,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+                               unsigned int type)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    virConnectPtr conn;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    VIR_DOMAIN_DEBUG(domain, "certificate type=%d", type);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    virResetLastError();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    virCheckDomainReturn(domain, -1);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    conn = domain->conn;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    if (type >= VIR_DOMAIN_TLS_CERT_LAST)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+        goto error;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    if (conn->driver->domainiReloadTLSCertificates) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+        int ret;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+        ret = conn->driver->domainiReloadTLSCertificates(domain, type);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+        if (ret < 0)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+            goto error;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+        return ret;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    virReportUnsupportedError();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+ error:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    virDispatchError(domain->conn);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    return -1;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">index c90d52edc0..61cd8cfa24 100644<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">--- a/src/qemu/qemu_driver.c<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+++ b/src/qemu/qemu_driver.c<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -20449,6 +20449,16 @@ qemuDomainStartDirtyRateCalc(virDomainPtr dom,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">     return ret;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+static int<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+qemuDomainReloadTLSCertificates(virDomainPtr domain,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+                                unsigned int type)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    virQEMUDriver *driver = domain->conn->privateData;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    virDomainObj *vm = qemuDomainObjFromDomain(domain);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    if (!driver || !vm)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+        return -1;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    return qemuDomainReloadTLSCerts(driver, vm, type);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> static virHypervisorDriver qemuHypervisorDriver = {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">     .name = QEMU_DRIVER_NAME,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -20693,6 +20703,7 @@ static virHypervisorDriver qemuHypervisorDriver = {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">     .domainAuthorizedSSHKeysSet = qemuDomainAuthorizedSSHKeysSet, /* 6.10.0 */<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">     .domainGetMessages = qemuDomainGetMessages, /* 7.1.0 */<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">     .domainStartDirtyRateCalc = qemuDomainStartDirtyRateCalc, /* 7.2.0 */<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    .domainiReloadTLSCertificates = qemuDomainReloadTLSCertificates, /* 7.2.0 */<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">};<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">index 444d89d64a..013d8728a0 100644<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">--- a/src/qemu/qemu_hotplug.c<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+++ b/src/qemu/qemu_hotplug.c<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -6704,3 +6704,24 @@ qemuDomainSetVcpuInternal(virQEMUDriver *driver,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">     virBitmapFree(livevcpus);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">     return ret;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+int qemuDomainReloadTLSCerts(virQEMUDriverPtr driver,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+                             virDomainObjPtr vm,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+                             int type)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    int ret = -1;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    qemuDomainObjPrivate *priv = vm->privateData;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    /* for now, only VNC is supported */<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    if (type != VIR_DOMAIN_TLS_CERT_GRAPHICS_VNC)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+        virReportError(VIR_ERR_INVALID_ARG,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+                       _("invalid certificate type=%d, only support VNC"),<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+                       type);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+        return ret;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    if (qemuDomainObjEnterMonitorAsync(driver, vm, QEMU_ASYNC_JOB_NONE) < 0)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+        return ret;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    ret = qemuMonitorReloadTLSCerts(priv->mon, type);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    if (qemuDomainObjExitMonitor(driver, vm) < 0)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+        ret = -1;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    return ret;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">diff --git a/src/qemu/qemu_hotplug.h b/src/qemu/qemu_hotplug.h<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">index df8f76f8d6..44afe23f0a 100644<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">--- a/src/qemu/qemu_hotplug.h<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+++ b/src/qemu/qemu_hotplug.h<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -160,3 +160,7 @@ int qemuHotplugAttachDBusVMState(virQEMUDriver *driver,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">int qemuHotplugRemoveDBusVMState(virQEMUDriver *driver,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                                  virDomainObj *vm,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                                  qemuDomainAsyncJob asyncJob);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+int qemuDomainReloadTLSCerts(virQEMUDriverPtr driver,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+                             virDomainObjPtr vm,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+                             int type);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">index 3a7f231ce0..952ef87a6b 100644<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">--- a/src/qemu/qemu_monitor.c<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+++ b/src/qemu/qemu_monitor.c<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -4746,3 +4746,13 @@ qemuMonitorQueryDirtyRate(qemuMonitor *mon,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">     return qemuMonitorJSONQueryDirtyRate(mon, info);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+int<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+qemuMonitorReloadTLSCerts(qemuMonitorPtr mon, int type)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    const char *protocol = qemuMonitorTypeToProtocol(type);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    if (!protocol)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+        return -1;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    VIR_DEBUG("protocol=%s", protocol);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    return qemuMonitorJSONReloadTLSCerts(mon, protocol);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">index 6a25def78b..a5b702b023 100644<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">--- a/src/qemu/qemu_monitor.h<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+++ b/src/qemu/qemu_monitor.h<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -1496,3 +1496,6 @@ struct _qemuMonitorDirtyRateInfo {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">int<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">qemuMonitorQueryDirtyRate(qemuMonitor *mon,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                           qemuMonitorDirtyRateInfo *info);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+int qemuMonitorReloadTLSCerts(qemuMonitorPtr mon,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+                              int type);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">index 46aa3330a8..d2b06c4703 100644<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">--- a/src/qemu/qemu_monitor_json.c<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+++ b/src/qemu/qemu_monitor_json.c<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -9446,3 +9446,25 @@ qemuMonitorJSONQueryDirtyRate(qemuMonitor *mon,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">     return qemuMonitorJSONExtractDirtyRateInfo(data, info);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+int qemuMonitorJSONReloadTLSCerts(qemuMonitorPtr mon,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+                                  const char *protocol)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    int ret = -1;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    virJSONValuePtr reply = NULL;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    virJSONValuePtr cmd = qemuMonitorJSONMakeCommand("display-reload",<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+                                                     "s:type", protocol,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+                                                     "b:tls-certs", 1,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+                                                     NULL);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    if (!cmd)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+        return -1;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+        goto cleanup;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    if (qemuMonitorJSONCheckError(cmd, reply) < 0)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+        goto cleanup;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    ret = 0;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+ cleanup:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    virJSONValueFree(cmd);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    virJSONValueFree(reply);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    return ret;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">index 01a3ba25f1..d9ad77e873 100644<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">--- a/src/qemu/qemu_monitor_json.h<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+++ b/src/qemu/qemu_monitor_json.h<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -706,3 +706,6 @@ qemuMonitorJSONStartDirtyRateCalc(qemuMonitor *mon,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">int<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">qemuMonitorJSONQueryDirtyRate(qemuMonitor *mon,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                               qemuMonitorDirtyRateInfo *info);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+int qemuMonitorJSONReloadTLSCerts(qemuMonitorPtr mon,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+                                  const char *protocol);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-- <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">2.25.1<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
</div>
</body>
</html>