From nobody Sat Feb 7 11:39:10 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.25 as permitted sender) client-ip=209.132.183.25; envelope-from=libvir-list-bounces@redhat.com; helo=mx4-phx2.redhat.com; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.25 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; Return-Path: Return-Path: Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by mx.zohomail.com with SMTPS id 1479787284938191.13423835810158; Mon, 21 Nov 2016 20:01:24 -0800 (PST) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id uAM3wfVx025351; Mon, 21 Nov 2016 22:58:41 -0500 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id uAM3weK9031255 for ; Mon, 21 Nov 2016 22:58:40 -0500 Received: from mx1.redhat.com (ext-mx01.extmail.prod.ext.phx2.redhat.com [10.5.110.25]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id uAM3weLI012989 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Mon, 21 Nov 2016 22:58:40 -0500 Received: from mx0a-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 872DE81222 for ; Tue, 22 Nov 2016 03:58:39 +0000 (UTC) Received: from pps.filterd (m0098417.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.17/8.16.0.17) with SMTP id uAM3wROs092999 for ; Mon, 21 Nov 2016 22:58:39 -0500 Received: from e35.co.us.ibm.com (e35.co.us.ibm.com [32.97.110.153]) by mx0a-001b2d01.pphosted.com with ESMTP id 26vcrrusb4-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Mon, 21 Nov 2016 22:58:38 -0500 Received: from localhost by e35.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 21 Nov 2016 20:58:38 -0700 Received: from d03dlp03.boulder.ibm.com (9.17.202.179) by e35.co.us.ibm.com (192.168.1.135) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 21 Nov 2016 20:58:35 -0700 Received: from b03cxnp07028.gho.boulder.ibm.com (b03cxnp07028.gho.boulder.ibm.com [9.17.130.15]) by d03dlp03.boulder.ibm.com (Postfix) with ESMTP id ADE5919D803F; Mon, 21 Nov 2016 20:57:56 -0700 (MST) Received: from b03ledav002.gho.boulder.ibm.com (b03ledav002.gho.boulder.ibm.com [9.17.130.233]) by b03cxnp07028.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id uAM3wXId15008134; Mon, 21 Nov 2016 20:58:34 -0700 Received: from b03ledav002.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C6E8413603A; Mon, 21 Nov 2016 20:58:34 -0700 (MST) Received: from farman-ThinkPad-W540.ibm.com (unknown [9.85.134.169]) by b03ledav002.gho.boulder.ibm.com (Postfix) with ESMTPS id 5189A13603C; Mon, 21 Nov 2016 20:58:34 -0700 (MST) From: Eric Farman To: libvirt-list@redhat.com Date: Mon, 21 Nov 2016 22:58:20 -0500 In-Reply-To: <1479787103-26581-1-git-send-email-farman@linux.vnet.ibm.com> References: <1479787103-26581-1-git-send-email-farman@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 X-Content-Scanned: Fidelis XPS MAILER x-cbid: 16112203-0012-0000-0000-000011336F08 X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00006120; HX=3.00000240; KW=3.00000007; PH=3.00000004; SC=3.00000189; SDB=6.00783707; UDB=6.00378500; IPR=6.00561327; BA=6.00004898; NDR=6.00000001; ZLA=6.00000005; ZF=6.00000009; ZB=6.00000000; ZP=6.00000000; ZH=6.00000000; ZU=6.00000002; MB=3.00013404; XFM=3.00000011; UTC=2016-11-22 03:58:37 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 16112203-0013-0000-0000-000047607BB3 Message-Id: <1479787103-26581-7-git-send-email-farman@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2016-11-22_01:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=4 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1609300000 definitions=main-1611220070 X-Greylist: Sender passed SPF test, Sender IP whitelisted by DNSRBL, ACL 199 matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Tue, 22 Nov 2016 03:58:39 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Tue, 22 Nov 2016 03:58:39 +0000 (UTC) for IP:'148.163.158.5' DOMAIN:'mx0b-001b2d01.pphosted.com' HELO:'mx0a-001b2d01.pphosted.com' FROM:'farman@linux.vnet.ibm.com' RCPT:'' X-RedHat-Spam-Score: 0.099 (BAYES_50, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2) 148.163.158.5 mx0b-001b2d01.pphosted.com 148.163.158.5 mx0b-001b2d01.pphosted.com X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Scanned-By: MIMEDefang 2.78 on 10.5.110.25 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v4 6/9] conf: Wire up the vhost-scsi connection from/to XML 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-Zoho-Virus-Status: 2 X-ZohoMail-Forwarded-To: importer@patchew.org X-ZohoMail-Forwarded-For: patchew@euphon.net importer@patchew.org X-ZohoMail: RSF_0 Z_629925259 SPT_1 Z_629926901 SPT_1 UDT_7 RF_0 Content-Type: text/plain; charset="utf-8" With the QEMU components in place, provide the XML parsing to invoke that code when given the following XML snippet: An optional address element can be specified within the hostdev (pick CCW or PCI as necessary):
Signed-off-by: Eric Farman --- docs/schemas/domaincommon.rng | 23 +++++++++++ src/conf/domain_audit.c | 7 ++++ src/conf/domain_conf.c | 92 +++++++++++++++++++++++++++++++++++++++= +++- 3 files changed, 121 insertions(+), 1 deletion(-) diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 19d45fd..bb903ef 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -3974,6 +3974,7 @@ + =20 @@ -4102,6 +4103,28 @@ =20 + + + scsi_host + + + + + + + vhost + + + + + (naa\.)[0-9a-fA-F]{16} + + + + + + + storage diff --git a/src/conf/domain_audit.c b/src/conf/domain_audit.c index 2decf02..2d9ff5e 100644 --- a/src/conf/domain_audit.c +++ b/src/conf/domain_audit.c @@ -392,6 +392,7 @@ virDomainAuditHostdev(virDomainObjPtr vm, virDomainHost= devDefPtr hostdev, virDomainHostdevSubsysUSBPtr usbsrc =3D &hostdev->source.subsys.u.usb; virDomainHostdevSubsysPCIPtr pcisrc =3D &hostdev->source.subsys.u.pci; virDomainHostdevSubsysSCSIPtr scsisrc =3D &hostdev->source.subsys.u.sc= si; + virDomainHostdevSubsysSCSIVHostPtr hostsrc =3D &hostdev->source.subsys= .u.scsi_host; =20 virUUIDFormat(vm->def->uuid, uuidstr); if (!(vmname =3D virAuditEncode("vm", vm->def->name))) { @@ -444,6 +445,12 @@ virDomainAuditHostdev(virDomainObjPtr vm, virDomainHos= tdevDefPtr hostdev, } break; } + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST: + if (VIR_STRDUP_QUIET(address, hostsrc->wwpn) < 0) { + VIR_WARN("OOM while encoding audit message"); + goto cleanup; + } + break; default: VIR_WARN("Unexpected hostdev type while encoding audit message= : %d", hostdev->source.subsys.type); diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 3a4123d..618a214 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -2323,6 +2323,9 @@ void virDomainHostdevDefClear(virDomainHostdevDefPtr = def) } else { VIR_FREE(scsisrc->u.host.adapter); } + } else if (def->source.subsys.type =3D=3D VIR_DOMAIN_HOSTDEV_SUBSY= S_TYPE_SCSI_HOST) { + virDomainHostdevSubsysSCSIVHostPtr hostsrc =3D &def->source.su= bsys.u.scsi_host; + VIR_FREE(hostsrc->wwpn); } break; } @@ -6094,6 +6097,58 @@ virDomainHostdevSubsysSCSIDefParseXML(xmlNodePtr sou= rcenode, return ret; } =20 +static int +virDomainHostdevSubsysSCSIVHostDefParseXML(xmlNodePtr sourcenode, + virDomainHostdevDefPtr def) +{ + char *protocol =3D NULL; + virDomainHostdevSubsysSCSIVHostPtr hostsrc =3D &def->source.subsys.u.s= csi_host; + + if (!(protocol =3D virXMLPropString(sourcenode, "protocol"))) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("Missing scsi_host subsystem protocol")); + return -1; + } + + if ((hostsrc->protocol =3D + virDomainHostdevSubsysSCSIHostProtocolTypeFromString(protocol)) <= =3D 0) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Unknown scsi_host subsystem protocol '%s'"), + protocol); + goto cleanup; + } + + switch ((virDomainHostdevSubsysSCSIHostProtocolType) hostsrc->protocol= ) { + case VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_HOST_PROTOCOL_TYPE_VHOST: + if (!(hostsrc->wwpn =3D virXMLPropString(sourcenode, "wwpn"))) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("missing vhost-scsi hostdev source wwpn")); + goto cleanup; + } + + if (!STRPREFIX(hostsrc->wwpn, "naa.") || + !virValidateWWN(hostsrc->wwpn + 4)) { + virReportError(VIR_ERR_XML_ERROR, "%s", _("malformed 'wwpn' va= lue")); + goto cleanup; + } + break; + case VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_HOST_PROTOCOL_TYPE_NONE: + case VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_HOST_PROTOCOL_TYPE_LAST: + virReportError(VIR_ERR_XML_ERROR, + _("Invalid hostdev protocol '%s'"), + virDomainHostdevSubsysSCSIHostProtocolTypeToString(= hostsrc->protocol)); + goto cleanup; + break; + } + + return 0; + + cleanup: + VIR_FREE(hostsrc->wwpn); + VIR_FREE(protocol); + return -1; +} + =20 static int virDomainHostdevDefParseXMLSubsys(xmlNodePtr node, @@ -6218,6 +6273,11 @@ virDomainHostdevDefParseXMLSubsys(xmlNodePtr node, goto error; break; =20 + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST: + if (virDomainHostdevSubsysSCSIVHostDefParseXML(sourcenode, def) < = 0) + goto error; + break; + default: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("address type=3D'%s' not supported in hostdev int= erfaces"), @@ -13023,6 +13083,15 @@ virDomainHostdevDefParseXML(virDomainXMLOptionPtr = xmlopt, def->shareable =3D true; break; case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST: + if (def->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE && + def->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI && + def->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("SCSI_host host device must use 'pci' " + "or 'ccw' address type")); + goto error; + } + break; case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB: case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST: break; @@ -13907,7 +13976,14 @@ virDomainHostdevMatchSubsys(virDomainHostdevDefPtr= a, else return virDomainHostdevMatchSubsysSCSIHost(a, b); case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST: - /* Fall through for now */ + if (a->source.subsys.u.scsi_host.protocol !=3D + b->source.subsys.u.scsi_host.protocol) + return 0; + if (STREQ(a->source.subsys.u.scsi_host.wwpn, + b->source.subsys.u.scsi_host.wwpn)) + return 1; + else + return 0; case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST: return 0; } @@ -20814,9 +20890,11 @@ virDomainHostdevDefFormatSubsys(virBufferPtr buf, unsigned int flags, bool includeTypeInAddr) { + bool closedSource =3D false; virDomainHostdevSubsysUSBPtr usbsrc =3D &def->source.subsys.u.usb; virDomainHostdevSubsysPCIPtr pcisrc =3D &def->source.subsys.u.pci; virDomainHostdevSubsysSCSIPtr scsisrc =3D &def->source.subsys.u.scsi; + virDomainHostdevSubsysSCSIVHostPtr hostsrc =3D &def->source.subsys.u.s= csi_host; virDomainHostdevSubsysSCSIHostPtr scsihostsrc =3D &scsisrc->u.host; virDomainHostdevSubsysSCSIiSCSIPtr iscsisrc =3D &scsisrc->u.iscsi; =20 @@ -20857,6 +20935,15 @@ virDomainHostdevDefFormatSubsys(virBufferPtr buf, protocol, iscsisrc->path); } =20 + if (def->source.subsys.type =3D=3D VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI= _HOST) { + const char *protocol =3D + virDomainHostdevSubsysSCSIHostProtocolTypeToString(hostsrc->pr= otocol); + closedSource =3D true; + + virBufferAsprintf(buf, " protocol=3D'%s' wwpn=3D'%s'/", + protocol, hostsrc->wwpn); + } + virBufferAddLit(buf, ">\n"); =20 virBufferAdjustIndent(buf, 2); @@ -20910,6 +20997,8 @@ virDomainHostdevDefFormatSubsys(virBufferPtr buf, scsihostsrc->unit); } break; + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST: + break; default: virReportError(VIR_ERR_INTERNAL_ERROR, _("unexpected hostdev type %d"), @@ -20925,6 +21014,7 @@ virDomainHostdevDefFormatSubsys(virBufferPtr buf, } =20 virBufferAdjustIndent(buf, -2); + if (!closedSource) virBufferAddLit(buf, "\n"); =20 return 0; --=20 1.9.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list