From nobody Mon Feb 9 07:44:13 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1653311474; cv=none; d=zohomail.com; s=zohoarc; b=EgpT+38noVrxC8WYWAxeaLzWh4vnSL+NBIbXt/7JGfFOfEhVC8PSEwlCSNrcGEZsQyfUnfTWVzO417Chr1dtrAF9QKsn8fkTLOvFzV/lWFzumlIPkClyAI9efmiIz4oejrPo2qV71ok/BIvlHlYts6g3IXHnYb0xHcg9vP7xpDc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1653311474; 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=FHBLEucmXfPEaR+jUEaCCbSOX6xXepJqN3xFX0LSRXc=; b=Ja5rOI0ZsP/qLlEGYguQsG5DbyrmdtMsIMIwWE8my5I/WlEnPmdjXrIjcR5HwrlQKBKBA/9YGKwPuchrzaRckU11wbfGQRRn/JnNwPvk1VbaLADjEDWCIqPfMTx6NLs3UBUDHO6+n8rAWiqTVmJPV94DCzD9NqS7Y5BORc9Wldk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.zohomail.com with SMTPS id 165331147448933.39481262516904; Mon, 23 May 2022 06:11:14 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-241-HYnGZLFVPJGCMdjAPfHOUw-1; Mon, 23 May 2022 09:09:18 -0400 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id E08DF101AA52; Mon, 23 May 2022 13:09:08 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id CB72C492C14; Mon, 23 May 2022 13:09:08 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 948EA194705E; Mon, 23 May 2022 13:09:08 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 172A41947059 for ; Mon, 23 May 2022 13:09:03 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id ED9AA40D1B9A; Mon, 23 May 2022 13:09:02 +0000 (UTC) Received: from maggie.redhat.com (unknown [10.43.2.180]) by smtp.corp.redhat.com (Postfix) with ESMTP id 78EF440C1257 for ; Mon, 23 May 2022 13:09:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1653311473; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=FHBLEucmXfPEaR+jUEaCCbSOX6xXepJqN3xFX0LSRXc=; b=XUokwhicqd8Cr2+7iwY18Snpnm8XoaazBubZnFUL7297CuJqwxwiN+vhY6BIZ+amVYEDAf PIBEPZMezrhb1Qs8bi2iGlKbF1LFM3GjblkiVOEIVEM+Ye4UJIPakZ0iD8Xhs3EsRnBWmy gpKWS9Jy5BLMIuSXJRRNmqPudvlsEQo= X-MC-Unique: HYnGZLFVPJGCMdjAPfHOUw-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Michal Privoznik To: libvir-list@redhat.com Subject: [PATCH 12/17] virDomainChrDefParseXML: Switch to virXMLPropEnumDefault() Date: Mon, 23 May 2022 15:08:47 +0200 Message-Id: <77ecda132358f3742134cca3338a2ae78d718a8c.1653311261.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.11.54.2 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 2.85 on 10.11.54.10 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1653311476751100001 Content-Type: text/plain; charset="utf-8"; x-default="true" The virDomainChrDefParseXML() function uses old style of parsing XML (virXMLPropString + str2enum conversion). Use virXMLPropEnumDefault() which encapsulates those steps. Signed-off-by: Michal Privoznik Reviewed-by: Boris Fiuczynski --- src/ch/ch_monitor.c | 2 +- src/conf/domain_conf.c | 82 +++++++++++--------------------- src/conf/domain_conf.h | 2 +- src/conf/domain_validate.c | 2 +- src/conf/virchrdev.c | 29 +++++++++++ src/libxl/libxl_conf.c | 20 ++++++++ src/libxl/xen_common.c | 23 ++++++++- src/qemu/qemu_command.c | 6 +-- src/qemu/qemu_domain.c | 34 ++++++++++++- src/qemu/qemu_monitor_json.c | 2 +- src/qemu/qemu_process.c | 2 +- src/qemu/qemu_validate.c | 2 +- src/security/security_apparmor.c | 4 +- src/security/security_dac.c | 4 +- src/security/security_selinux.c | 24 ++++++++++ src/vmx/vmx.c | 26 ++++++++++ tests/testutilsqemu.c | 2 +- 17 files changed, 197 insertions(+), 69 deletions(-) diff --git a/src/ch/ch_monitor.c b/src/ch/ch_monitor.c index 2c6b83a1b5..d6fac642da 100644 --- a/src/ch/ch_monitor.c +++ b/src/ch/ch_monitor.c @@ -281,7 +281,7 @@ virCHMonitorBuildNetJson(virJSONValue *nets, } break; case VIR_DOMAIN_NET_TYPE_VHOSTUSER: - if ((virDomainChrType)netdef->data.vhostuser->type !=3D VIR_DO= MAIN_CHR_TYPE_UNIX) { + if (netdef->data.vhostuser->type !=3D VIR_DOMAIN_CHR_TYPE_UNIX= ) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("vhost_user type support UNIX socket in this = CH")); return -1; diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 44b507b74d..b5ce80eb76 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -2694,7 +2694,7 @@ virDomainChrSourceDefGetPath(virDomainChrSourceDef *c= hr) if (!chr) return NULL; =20 - switch ((virDomainChrType) chr->type) { + switch (chr->type) { case VIR_DOMAIN_CHR_TYPE_PTY: case VIR_DOMAIN_CHR_TYPE_DEV: case VIR_DOMAIN_CHR_TYPE_FILE: @@ -2761,6 +2761,13 @@ virDomainChrSourceDefClear(virDomainChrSourceDef *de= f) case VIR_DOMAIN_CHR_TYPE_DBUS: VIR_FREE(def->data.dbus.channel); break; + case VIR_DOMAIN_CHR_TYPE_NULL: + case VIR_DOMAIN_CHR_TYPE_VC: + case VIR_DOMAIN_CHR_TYPE_STDIO: + case VIR_DOMAIN_CHR_TYPE_SPICEVMC: + case VIR_DOMAIN_CHR_TYPE_QEMU_VDAGENT: + case VIR_DOMAIN_CHR_TYPE_LAST: + break; } =20 VIR_FREE(def->logfile); @@ -2778,7 +2785,7 @@ virDomainChrSourceDefCopy(virDomainChrSourceDef *dest, dest->logfile =3D g_strdup(src->logfile); dest->logappend =3D src->logappend; =20 - switch ((virDomainChrType)src->type) { + switch (src->type) { case VIR_DOMAIN_CHR_TYPE_FILE: case VIR_DOMAIN_CHR_TYPE_PTY: case VIR_DOMAIN_CHR_TYPE_DEV: @@ -2875,7 +2882,7 @@ virDomainChrSourceDefIsEqual(const virDomainChrSource= Def *src, if (tgt->type !=3D src->type) return false; =20 - switch ((virDomainChrType)src->type) { + switch (src->type) { case VIR_DOMAIN_CHR_TYPE_FILE: return src->data.file.append =3D=3D tgt->data.file.append && STREQ_NULLABLE(src->data.file.path, tgt->data.file.path); @@ -11270,7 +11277,7 @@ virDomainChrSourceDefParseXML(virDomainChrSourceDef= *def, goto error; } =20 - switch ((virDomainChrType) def->type) { + switch (def->type) { case VIR_DOMAIN_CHR_TYPE_FILE: if (virDomainChrSourceDefParseFile(def, sources[0]) < 0) goto error; @@ -11477,7 +11484,6 @@ virDomainChrDefParseXML(virDomainXMLOption *xmlopt, xmlNodePtr target; const char *nodeName; virDomainChrDef *def; - g_autofree char *type =3D NULL; VIR_XPATH_NODE_AUTORESTORE(ctxt) =20 ctxt->node =3D node; @@ -11485,15 +11491,12 @@ virDomainChrDefParseXML(virDomainXMLOption *xmlop= t, if (!(def =3D virDomainChrDefNew(xmlopt))) return NULL; =20 - type =3D virXMLPropString(node, "type"); - if (type =3D=3D NULL) { - def->source->type =3D VIR_DOMAIN_CHR_TYPE_PTY; - } else if ((def->source->type =3D virDomainChrTypeFromString(type)) < = 0) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("unknown type presented to host for character dev= ice: %s"), - type); + if (virXMLPropEnumDefault(node, "type", + virDomainChrTypeFromString, + VIR_XML_PROP_NONE, + &def->source->type, + VIR_DOMAIN_CHR_TYPE_PTY) < 0) goto error; - } =20 nodeName =3D (const char *) node->name; if ((def->deviceType =3D virDomainChrDeviceTypeFromString(nodeName)) <= 0) { @@ -11551,7 +11554,6 @@ virDomainSmartcardDefParseXML(virDomainXMLOption *x= mlopt, unsigned int flags) { g_autoptr(virDomainSmartcardDef) def =3D NULL; - g_autofree char *type =3D NULL; g_autofree xmlNodePtr *certificates =3D NULL; int n =3D 0; VIR_XPATH_NODE_AUTORESTORE(ctxt) @@ -11597,23 +11599,14 @@ virDomainSmartcardDefParseXML(virDomainXMLOption = *xmlopt, break; =20 case VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH: - type =3D virXMLPropString(node, "type"); - if (type =3D=3D NULL) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("passthrough mode requires a character " - "device type attribute")); - return NULL; - } - if (!(def->data.passthru =3D virDomainChrSourceDefNew(xmlopt))) return NULL; =20 - if ((def->data.passthru->type =3D virDomainChrTypeFromString(type)= ) < 0) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("unknown type presented to host for " - "character device: %s"), type); + if (virXMLPropEnum(node, "type", + virDomainChrTypeFromString, + VIR_XML_PROP_REQUIRED, + &def->data.passthru->type) < 0) return NULL; - } =20 if (virDomainChrSourceDefParseXML(def->data.passthru, node, flags, NULL, ctxt) < 0) @@ -13349,7 +13342,6 @@ virDomainRNGDefParseXML(virDomainXMLOption *xmlopt, g_autofree xmlNodePtr *backends =3D NULL; g_autofree char *model =3D NULL; g_autofree char *backend =3D NULL; - g_autofree char *type =3D NULL; =20 def =3D g_new0(virDomainRNGDef, 1); =20 @@ -13405,22 +13397,14 @@ virDomainRNGDefParseXML(virDomainXMLOption *xmlop= t, break; =20 case VIR_DOMAIN_RNG_BACKEND_EGD: - if (!(type =3D virXMLPropString(backends[0], "type"))) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("missing EGD backend type")); - goto error; - } - if (!(def->source.chardev =3D virDomainChrSourceDefNew(xmlopt))) goto error; =20 - def->source.chardev->type =3D virDomainChrTypeFromString(type); - if (def->source.chardev->type < 0) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("unknown backend type '%s' for egd"), - type); + if (virXMLPropEnum(backends[0], "type", + virDomainChrTypeFromString, + VIR_XML_PROP_REQUIRED, + &def->source.chardev->type) < 0) goto error; - } =20 if (virDomainChrSourceDefParseXML(def->source.chardev, backends[0], flags, @@ -14320,7 +14304,6 @@ virDomainRedirdevDefParseXML(virDomainXMLOption *xm= lopt, { virDomainRedirdevDef *def; g_autofree char *bus =3D NULL; - g_autofree char *type =3D NULL; =20 def =3D g_new0(virDomainRedirdevDef, 1); =20 @@ -14338,18 +14321,11 @@ virDomainRedirdevDefParseXML(virDomainXMLOption *= xmlopt, def->bus =3D VIR_DOMAIN_REDIRDEV_BUS_USB; } =20 - type =3D virXMLPropString(node, "type"); - if (type) { - if ((def->source->type =3D virDomainChrTypeFromString(type)) < 0) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("unknown redirdev character device type '%s'"= ), type); - goto error; - } - } else { - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("missing type in redirdev")); + if (virXMLPropEnum(node, "type", + virDomainChrTypeFromString, + VIR_XML_PROP_REQUIRED, + &def->source->type) < 0) goto error; - } =20 /* boot gets parsed in virDomainDeviceInfoParseXML * source gets parsed in virDomainChrSourceDefParseXML */ @@ -25070,7 +25046,7 @@ virDomainChrSourceDefFormat(virBuffer *buf, g_auto(virBuffer) attrBuf =3D VIR_BUFFER_INITIALIZER; g_auto(virBuffer) childBuf =3D VIR_BUFFER_INIT_CHILD(buf); =20 - switch ((virDomainChrType)def->type) { + switch (def->type) { case VIR_DOMAIN_CHR_TYPE_NULL: case VIR_DOMAIN_CHR_TYPE_VC: case VIR_DOMAIN_CHR_TYPE_STDIO: diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 30aa0ed8d3..a81fb09678 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1281,7 +1281,7 @@ typedef enum { /* The host side information for a character device. */ struct _virDomainChrSourceDef { virObject parent; - int type; /* virDomainChrType */ + virDomainChrType type; virObject *privateData; union { /* no for null, vc, stdio */ diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index 28234f910d..4fce7059dc 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -932,7 +932,7 @@ virDomainChrSourceDefValidate(const virDomainChrSourceD= ef *src_def, const virDomainChrDef *chr_def, const virDomainDef *def) { - switch ((virDomainChrType) src_def->type) { + switch (src_def->type) { case VIR_DOMAIN_CHR_TYPE_NULL: case VIR_DOMAIN_CHR_TYPE_PTY: case VIR_DOMAIN_CHR_TYPE_VC: diff --git a/src/conf/virchrdev.c b/src/conf/virchrdev.c index 8610f0ac5c..730e4e23b4 100644 --- a/src/conf/virchrdev.c +++ b/src/conf/virchrdev.c @@ -339,6 +339,21 @@ int virChrdevOpen(virChrdevs *devs, case VIR_DOMAIN_CHR_TYPE_UNIX: path =3D source->data.nix.path; break; + case VIR_DOMAIN_CHR_TYPE_NULL: + case VIR_DOMAIN_CHR_TYPE_VC: + 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_TCP: + case VIR_DOMAIN_CHR_TYPE_SPICEVMC: + case VIR_DOMAIN_CHR_TYPE_SPICEPORT: + case VIR_DOMAIN_CHR_TYPE_NMDM: + case VIR_DOMAIN_CHR_TYPE_QEMU_VDAGENT: + case VIR_DOMAIN_CHR_TYPE_DBUS: + case VIR_DOMAIN_CHR_TYPE_LAST: + default: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Unsupported device type '%s'"), @@ -404,6 +419,20 @@ int virChrdevOpen(virChrdevs *devs, if (virFDStreamConnectUNIX(st, path, false) < 0) goto error; break; + case VIR_DOMAIN_CHR_TYPE_NULL: + case VIR_DOMAIN_CHR_TYPE_VC: + 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_TCP: + case VIR_DOMAIN_CHR_TYPE_SPICEVMC: + case VIR_DOMAIN_CHR_TYPE_SPICEPORT: + case VIR_DOMAIN_CHR_TYPE_NMDM: + case VIR_DOMAIN_CHR_TYPE_QEMU_VDAGENT: + case VIR_DOMAIN_CHR_TYPE_DBUS: + case VIR_DOMAIN_CHR_TYPE_LAST: default: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Unsupported device type '%s'"), diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index 401e47344e..0cfd49ebcf 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -273,6 +273,12 @@ libxlMakeChrdevStr(virDomainChrDef *def, char **buf) srcdef->data.nix.listen ? ",server,nowait" = : ""); break; =20 + case VIR_DOMAIN_CHR_TYPE_SPICEVMC: + case VIR_DOMAIN_CHR_TYPE_SPICEPORT: + case VIR_DOMAIN_CHR_TYPE_NMDM: + case VIR_DOMAIN_CHR_TYPE_QEMU_VDAGENT: + case VIR_DOMAIN_CHR_TYPE_DBUS: + case VIR_DOMAIN_CHR_TYPE_LAST: default: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unsupported chardev '%s'"), type); @@ -1972,6 +1978,20 @@ libxlMakeChannel(virDomainChrDef *l_channel, x_channel->connection =3D LIBXL_CHANNEL_CONNECTION_SOCKET; x_channel->u.socket.path =3D g_strdup(l_channel->source->data.nix.= path); break; + case VIR_DOMAIN_CHR_TYPE_NULL: + case VIR_DOMAIN_CHR_TYPE_VC: + 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_TCP: + case VIR_DOMAIN_CHR_TYPE_SPICEVMC: + case VIR_DOMAIN_CHR_TYPE_SPICEPORT: + case VIR_DOMAIN_CHR_TYPE_NMDM: + case VIR_DOMAIN_CHR_TYPE_QEMU_VDAGENT: + case VIR_DOMAIN_CHR_TYPE_DBUS: + case VIR_DOMAIN_CHR_TYPE_LAST: default: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("channel source type not supported")); diff --git a/src/libxl/xen_common.c b/src/libxl/xen_common.c index b97ba0a199..6487cb63df 100644 --- a/src/libxl/xen_common.c +++ b/src/libxl/xen_common.c @@ -824,11 +824,14 @@ xenParseSxprChar(const char *value, def->source->type =3D VIR_DOMAIN_CHR_TYPE_TCP; def->source->data.tcp.protocol =3D VIR_DOMAIN_CHR_TCP_PROTOCOL= _TELNET; } else { - if ((def->source->type =3D virDomainChrTypeFromString(prefix))= < 0) { + int type =3D virDomainChrTypeFromString(prefix); + + if (type < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("unknown chr device type '%s'"), prefix); goto error; } + def->source->type =3D type; } } =20 @@ -920,6 +923,18 @@ xenParseSxprChar(const char *value, def->source->data.nix.listen =3D true; } break; + + case VIR_DOMAIN_CHR_TYPE_NULL: + case VIR_DOMAIN_CHR_TYPE_VC: + case VIR_DOMAIN_CHR_TYPE_DEV: + case VIR_DOMAIN_CHR_TYPE_STDIO: + case VIR_DOMAIN_CHR_TYPE_SPICEVMC: + case VIR_DOMAIN_CHR_TYPE_SPICEPORT: + case VIR_DOMAIN_CHR_TYPE_NMDM: + case VIR_DOMAIN_CHR_TYPE_QEMU_VDAGENT: + case VIR_DOMAIN_CHR_TYPE_DBUS: + case VIR_DOMAIN_CHR_TYPE_LAST: + break; } =20 return def; @@ -1525,6 +1540,12 @@ xenFormatSxprChr(virDomainChrDef *def, virBufferAddLit(buf, ",server,nowait"); break; =20 + case VIR_DOMAIN_CHR_TYPE_SPICEVMC: + case VIR_DOMAIN_CHR_TYPE_SPICEPORT: + case VIR_DOMAIN_CHR_TYPE_NMDM: + case VIR_DOMAIN_CHR_TYPE_QEMU_VDAGENT: + case VIR_DOMAIN_CHR_TYPE_DBUS: + case VIR_DOMAIN_CHR_TYPE_LAST: default: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unsupported chr device type '%s'"), type); diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 5ea88bf239..365b7d8292 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -1304,7 +1304,7 @@ qemuBuildChardevStr(const virDomainChrSourceDef *dev, const char *path; virTristateSwitch append; =20 - switch ((virDomainChrType) dev->type) { + switch (dev->type) { case VIR_DOMAIN_CHR_TYPE_NULL: virBufferAsprintf(&buf, "null,id=3D%s", charAlias); break; @@ -1484,7 +1484,7 @@ qemuBuildChardevCommand(virCommand *cmd, qemuDomainChrSourcePrivate *chrSourcePriv =3D QEMU_DOMAIN_CHR_SOURCE_P= RIVATE(dev); g_autofree char *charstr =3D NULL; =20 - switch ((virDomainChrType) dev->type) { + switch (dev->type) { case VIR_DOMAIN_CHR_TYPE_TCP: if (dev->data.tcp.haveTLS =3D=3D VIR_TRISTATE_BOOL_YES) { g_autofree char *objalias =3D NULL; @@ -8670,7 +8670,7 @@ qemuInterfaceVhostuserConnect(virCommand *cmd, { g_autofree char *charAlias =3D qemuAliasChardevFromDevAlias(net->info.= alias); =20 - switch ((virDomainChrType)net->data.vhostuser->type) { + switch (net->data.vhostuser->type) { case VIR_DOMAIN_CHR_TYPE_UNIX: if (qemuBuildChardevCommand(cmd, net->data.vhostuser, diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 30ef5b7550..3432c83153 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -2310,10 +2310,28 @@ qemuDomainObjPrivateXMLFormat(virBuffer *buf, case VIR_DOMAIN_CHR_TYPE_UNIX: monitorpath =3D priv->monConfig->data.nix.path; break; - default: case VIR_DOMAIN_CHR_TYPE_PTY: monitorpath =3D priv->monConfig->data.file.path; break; + case VIR_DOMAIN_CHR_TYPE_NULL: + case VIR_DOMAIN_CHR_TYPE_VC: + 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_TCP: + case VIR_DOMAIN_CHR_TYPE_SPICEVMC: + case VIR_DOMAIN_CHR_TYPE_SPICEPORT: + case VIR_DOMAIN_CHR_TYPE_NMDM: + case VIR_DOMAIN_CHR_TYPE_QEMU_VDAGENT: + case VIR_DOMAIN_CHR_TYPE_DBUS: + case VIR_DOMAIN_CHR_TYPE_LAST: + default: + virReportError(VIR_ERR_INTERNAL_ERROR, + _("unsupported monitor type '%s'"), + virDomainChrTypeToString(priv->monConfig->type)= ); + return -1; } =20 virBufferEscapeString(buf, "monConfig->data.nix.path =3D monitorpath; break; + case VIR_DOMAIN_CHR_TYPE_NULL: + case VIR_DOMAIN_CHR_TYPE_VC: + 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_TCP: + case VIR_DOMAIN_CHR_TYPE_SPICEVMC: + case VIR_DOMAIN_CHR_TYPE_SPICEPORT: + case VIR_DOMAIN_CHR_TYPE_NMDM: + case VIR_DOMAIN_CHR_TYPE_QEMU_VDAGENT: + case VIR_DOMAIN_CHR_TYPE_DBUS: + case VIR_DOMAIN_CHR_TYPE_LAST: default: VIR_FREE(monitorpath); virReportError(VIR_ERR_INTERNAL_ERROR, diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index afe45c415b..f6294e4ed5 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -6651,7 +6651,7 @@ qemuMonitorJSONAttachCharDevGetProps(const char *chrI= D, g_autoptr(virJSONValue) backendData =3D virJSONValueNewObject(); const char *backendType =3D NULL; =20 - switch ((virDomainChrType)chr->type) { + switch (chr->type) { case VIR_DOMAIN_CHR_TYPE_NULL: case VIR_DOMAIN_CHR_TYPE_VC: case VIR_DOMAIN_CHR_TYPE_PTY: diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 85bf452a59..f25cc0acf9 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -6878,7 +6878,7 @@ qemuProcessPrepareHostBackendChardevOne(virDomainDevi= ceDef *dev, devalias =3D data->fdprefix; } =20 - switch ((virDomainChrType) chardev->type) { + switch (chardev->type) { case VIR_DOMAIN_CHR_TYPE_NULL: case VIR_DOMAIN_CHR_TYPE_VC: case VIR_DOMAIN_CHR_TYPE_PTY: diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index e8830c4cd3..4d6355741e 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -1968,7 +1968,7 @@ qemuValidateDomainChrSourceDef(const virDomainChrSour= ceDef *def, const virDomainDef *vmdef, virQEMUCaps *qemuCaps) { - switch ((virDomainChrType)def->type) { + switch (def->type) { case VIR_DOMAIN_CHR_TYPE_TCP: if (qemuValidateDomainChrSourceReconnectDef(&def->data.tcp.reconne= ct) < 0) return -1; diff --git a/src/security/security_apparmor.c b/src/security/security_appar= mor.c index 008384dee8..c05a2fbaac 100644 --- a/src/security/security_apparmor.c +++ b/src/security/security_apparmor.c @@ -991,7 +991,7 @@ AppArmorSetChardevLabel(virSecurityManager *mgr, if (!secdef) return 0; =20 - switch ((virDomainChrType)dev_source->type) { + switch (dev_source->type) { case VIR_DOMAIN_CHR_TYPE_DEV: case VIR_DOMAIN_CHR_TYPE_FILE: case VIR_DOMAIN_CHR_TYPE_UNIX: @@ -1068,7 +1068,7 @@ AppArmorSetNetdevLabel(virSecurityManager *mgr, return 0; =20 dev_source =3D net->data.vhostuser; - switch ((virDomainChrType)dev_source->type) { + switch (dev_source->type) { case VIR_DOMAIN_CHR_TYPE_UNIX: ret =3D reload_profile(mgr, def, dev_source->data.file.path, true); break; diff --git a/src/security/security_dac.c b/src/security/security_dac.c index 69c462de8b..211f5cf9a2 100644 --- a/src/security/security_dac.c +++ b/src/security/security_dac.c @@ -1506,7 +1506,7 @@ virSecurityDACSetChardevLabelHelper(virSecurityManage= r *mgr, return -1; } =20 - switch ((virDomainChrType)dev_source->type) { + switch (dev_source->type) { case VIR_DOMAIN_CHR_TYPE_DEV: case VIR_DOMAIN_CHR_TYPE_FILE: if (virSecurityDACSetOwnership(mgr, NULL, @@ -1598,7 +1598,7 @@ virSecurityDACRestoreChardevLabelHelper(virSecurityMa= nager *mgr, chardevStdioLogd) return 0; =20 - switch ((virDomainChrType)dev_source->type) { + switch (dev_source->type) { case VIR_DOMAIN_CHR_TYPE_DEV: case VIR_DOMAIN_CHR_TYPE_FILE: if (virSecurityDACRestoreFileLabelInternal(mgr, NULL, diff --git a/src/security/security_selinux.c b/src/security/security_selinu= x.c index 6f02baf2ce..9d9e308a38 100644 --- a/src/security/security_selinux.c +++ b/src/security/security_selinux.c @@ -2570,6 +2570,18 @@ virSecuritySELinuxSetChardevLabel(virSecurityManager= *mgr, ret =3D 0; break; =20 + case VIR_DOMAIN_CHR_TYPE_NULL: + case VIR_DOMAIN_CHR_TYPE_VC: + case VIR_DOMAIN_CHR_TYPE_PTY: + case VIR_DOMAIN_CHR_TYPE_STDIO: + case VIR_DOMAIN_CHR_TYPE_UDP: + case VIR_DOMAIN_CHR_TYPE_TCP: + case VIR_DOMAIN_CHR_TYPE_SPICEVMC: + case VIR_DOMAIN_CHR_TYPE_SPICEPORT: + case VIR_DOMAIN_CHR_TYPE_NMDM: + case VIR_DOMAIN_CHR_TYPE_QEMU_VDAGENT: + case VIR_DOMAIN_CHR_TYPE_DBUS: + case VIR_DOMAIN_CHR_TYPE_LAST: default: ret =3D 0; break; @@ -2643,6 +2655,18 @@ virSecuritySELinuxRestoreChardevLabel(virSecurityMan= ager *mgr, ret =3D 0; break; =20 + case VIR_DOMAIN_CHR_TYPE_NULL: + case VIR_DOMAIN_CHR_TYPE_VC: + case VIR_DOMAIN_CHR_TYPE_PTY: + case VIR_DOMAIN_CHR_TYPE_STDIO: + case VIR_DOMAIN_CHR_TYPE_UDP: + case VIR_DOMAIN_CHR_TYPE_TCP: + case VIR_DOMAIN_CHR_TYPE_SPICEVMC: + case VIR_DOMAIN_CHR_TYPE_SPICEPORT: + case VIR_DOMAIN_CHR_TYPE_NMDM: + case VIR_DOMAIN_CHR_TYPE_QEMU_VDAGENT: + case VIR_DOMAIN_CHR_TYPE_DBUS: + case VIR_DOMAIN_CHR_TYPE_LAST: default: ret =3D 0; break; diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index c391caa910..9c63d48c59 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -4117,6 +4117,18 @@ virVMXFormatSerial(virVMXContext *ctx, virDomainChrD= ef *def, def->source->data.tcp.listen ? "server" : "clien= t"); break; =20 + case VIR_DOMAIN_CHR_TYPE_NULL: + case VIR_DOMAIN_CHR_TYPE_VC: + case VIR_DOMAIN_CHR_TYPE_PTY: + case VIR_DOMAIN_CHR_TYPE_STDIO: + case VIR_DOMAIN_CHR_TYPE_UDP: + case VIR_DOMAIN_CHR_TYPE_UNIX: + case VIR_DOMAIN_CHR_TYPE_SPICEVMC: + case VIR_DOMAIN_CHR_TYPE_SPICEPORT: + case VIR_DOMAIN_CHR_TYPE_NMDM: + case VIR_DOMAIN_CHR_TYPE_QEMU_VDAGENT: + case VIR_DOMAIN_CHR_TYPE_DBUS: + case VIR_DOMAIN_CHR_TYPE_LAST: default: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Unsupported character device type '%s'"), @@ -4174,6 +4186,20 @@ virVMXFormatParallel(virVMXContext *ctx, virDomainCh= rDef *def, VIR_FREE(fileName); break; =20 + case VIR_DOMAIN_CHR_TYPE_NULL: + case VIR_DOMAIN_CHR_TYPE_VC: + case VIR_DOMAIN_CHR_TYPE_PTY: + case VIR_DOMAIN_CHR_TYPE_PIPE: + case VIR_DOMAIN_CHR_TYPE_STDIO: + case VIR_DOMAIN_CHR_TYPE_UDP: + case VIR_DOMAIN_CHR_TYPE_TCP: + case VIR_DOMAIN_CHR_TYPE_UNIX: + case VIR_DOMAIN_CHR_TYPE_SPICEVMC: + case VIR_DOMAIN_CHR_TYPE_SPICEPORT: + case VIR_DOMAIN_CHR_TYPE_NMDM: + case VIR_DOMAIN_CHR_TYPE_LAST: + case VIR_DOMAIN_CHR_TYPE_QEMU_VDAGENT: + case VIR_DOMAIN_CHR_TYPE_DBUS: default: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Unsupported character device type '%s'"), diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c index 004c7cf1d6..7fd3c94f5e 100644 --- a/tests/testutilsqemu.c +++ b/tests/testutilsqemu.c @@ -1044,7 +1044,7 @@ testQemuPrepareHostBackendChardevOne(virDomainDeviceD= ef *dev, devalias =3D "monitor"; } =20 - switch ((virDomainChrType) chardev->type) { + switch (chardev->type) { case VIR_DOMAIN_CHR_TYPE_NULL: case VIR_DOMAIN_CHR_TYPE_VC: case VIR_DOMAIN_CHR_TYPE_PTY: --=20 2.35.1