From nobody Thu May 15 20:54:22 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1503925042287774.1541555943213; Mon, 28 Aug 2017 05:57:22 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 370B968BB; Mon, 28 Aug 2017 12:57:20 +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 11C577FEA2; Mon, 28 Aug 2017 12:57:20 +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 CBEDA3FAD4; Mon, 28 Aug 2017 12:57:19 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v7SCv02A011343 for ; Mon, 28 Aug 2017 08:57:00 -0400 Received: by smtp.corp.redhat.com (Postfix) id 2C01178DFE; Mon, 28 Aug 2017 12:57:00 +0000 (UTC) Received: from antique-work.brq.redhat.com (unknown [10.43.2.152]) by smtp.corp.redhat.com (Postfix) with ESMTP id AA4C3784A7 for ; Mon, 28 Aug 2017 12:56:59 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 370B968BB Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: Pavel Hrdina To: libvir-list@redhat.com Date: Mon, 28 Aug 2017 14:56:52 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 4/5] qemu: implement chardev source reconnect 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: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Mon, 28 Aug 2017 12:57:20 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" The reconnect attribute for chardev devices in QEMU is used to configure the reconnect timeout in seconds. Setting '0' value disables the reconnect functionality thus we don't allow to set '0' for QEMU. To disable the reconnect user should use . Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=3D1254971 Signed-off-by: Pavel Hrdina --- src/qemu/qemu_command.c | 17 ++++++++ src/qemu/qemu_domain.c | 101 ++++++++++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 118 insertions(+) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index a68ff717fd..53b79ac976 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -5044,6 +5044,19 @@ qemuBuildChrChardevFileStr(virLogManagerPtr logManag= er, return 0; } =20 + +static void +qemuBuildChrChardevReconnectStr(virBufferPtr buf, + const virDomainChrSourceReconnectDef *def) +{ + if (def->enabled =3D=3D VIR_TRISTATE_BOOL_YES) { + virBufferAsprintf(buf, ",reconnect=3D%u", def->timeout); + } else if (def->enabled =3D=3D VIR_TRISTATE_BOOL_NO) { + virBufferAddLit(buf, ",reconnect=3D0"); + } +} + + /* This function outputs a -chardev command line option which describes on= ly the * host side of the character device */ static char * @@ -5142,6 +5155,8 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager, if (dev->data.tcp.listen) virBufferAdd(&buf, nowait ? ",server,nowait" : ",server", -1); =20 + qemuBuildChrChardevReconnectStr(&buf, &dev->data.tcp.reconnect); + if (dev->data.tcp.haveTLS =3D=3D VIR_TRISTATE_BOOL_YES) { qemuDomainChrSourcePrivatePtr chrSourcePriv =3D QEMU_DOMAIN_CHR_SOURCE_PRIVATE(dev); @@ -5175,6 +5190,8 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager, virQEMUBuildBufferEscapeComma(&buf, dev->data.nix.path); if (dev->data.nix.listen) virBufferAdd(&buf, nowait ? ",server,nowait" : ",server", -1); + + qemuBuildChrChardevReconnectStr(&buf, &dev->data.nix.reconnect); break; =20 case VIR_DOMAIN_CHR_TYPE_SPICEVMC: diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 2c77a64424..05bf1c7d02 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -3211,6 +3211,95 @@ qemuDomainNetSupportsCoalesce(virDomainNetType type) =20 =20 static int +qemuDomainChrSourceReconnectDefValidate(const virDomainChrSourceReconnectD= ef *def) +{ + if (def->enabled =3D=3D VIR_TRISTATE_BOOL_YES && + def->timeout =3D=3D 0) { + virReportError(VIR_ERR_INVALID_ARG, "%s", + _("chardev reconnect source timeout cannot be '0'")= ); + return -1; + } + + return 0; +} + + +static int +qemuDomainChrSourceDefValidate(const virDomainChrSourceDef *def) +{ + switch ((virDomainChrType)def->type) { + case VIR_DOMAIN_CHR_TYPE_TCP: + if (qemuDomainChrSourceReconnectDefValidate(&def->data.tcp.reconne= ct) < 0) + return -1; + break; + + case VIR_DOMAIN_CHR_TYPE_UNIX: + if (qemuDomainChrSourceReconnectDefValidate(&def->data.nix.reconne= ct) < 0) + return -1; + break; + + case VIR_DOMAIN_CHR_TYPE_NULL: + case VIR_DOMAIN_CHR_TYPE_VC: + case VIR_DOMAIN_CHR_TYPE_PTY: + case VIR_DOMAIN_CHR_TYPE_DEV: + case VIR_DOMAIN_CHR_TYPE_FILE: + case VIR_DOMAIN_CHR_TYPE_PIPE: + case VIR_DOMAIN_CHR_TYPE_STDIO: + case VIR_DOMAIN_CHR_TYPE_UDP: + case VIR_DOMAIN_CHR_TYPE_SPICEVMC: + case VIR_DOMAIN_CHR_TYPE_SPICEPORT: + case VIR_DOMAIN_CHR_TYPE_NMDM: + case VIR_DOMAIN_CHR_TYPE_LAST: + break; + } + + return 0; +} + + +static int +qemuDomainChrDefValidate(const virDomainChrDef *def) +{ + if (qemuDomainChrSourceDefValidate(def->source) < 0) + return -1; + + return 0; +} + + +static int +qemuDomainSmartcardDefValidate(const virDomainSmartcardDef *def) +{ + if (def->type =3D=3D VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH && + qemuDomainChrSourceDefValidate(def->data.passthru) < 0) + return -1; + + return 0; +} + + +static int +qemuDomainRNGDefValidate(const virDomainRNGDef *def) +{ + if (def->backend =3D=3D VIR_DOMAIN_RNG_BACKEND_EGD && + qemuDomainChrSourceDefValidate(def->source.chardev) < 0) + return -1; + + return 0; +} + + +static int +qemuDomainRedirdevDefValidate(const virDomainRedirdevDef *def) +{ + if (qemuDomainChrSourceDefValidate(def->source) < 0) + return -1; + + return 0; +} + + +static int qemuDomainDeviceDefValidate(const virDomainDeviceDef *dev, const virDomainDef *def ATTRIBUTE_UNUSED, void *opaque) @@ -3257,6 +3346,18 @@ qemuDomainDeviceDefValidate(const virDomainDeviceDef= *dev, virDomainNetTypeToString(net->type)); goto cleanup; } + } else if (dev->type =3D=3D VIR_DOMAIN_DEVICE_CHR) { + if (qemuDomainChrDefValidate(dev->data.chr) < 0) + goto cleanup; + } else if (dev->type =3D=3D VIR_DOMAIN_DEVICE_SMARTCARD) { + if (qemuDomainSmartcardDefValidate(dev->data.smartcard) < 0) + goto cleanup; + } else if (dev->type =3D=3D VIR_DOMAIN_DEVICE_RNG) { + if (qemuDomainRNGDefValidate(dev->data.rng) < 0) + goto cleanup; + } else if (dev->type =3D=3D VIR_DOMAIN_DEVICE_REDIRDEV) { + if (qemuDomainRedirdevDefValidate(dev->data.redirdev) < 0) + goto cleanup; } =20 /* forbid capabilities mode hostdev in this kind of hypervisor */ --=20 2.13.5 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list