From ccb27a08d523a17715b22b501e34545c9df9fe4b Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Fri, 10 Jul 2020 12:26:31 +0200 Subject: [PATCH] virDomainHostdevDefFormatSubsys: Split out formatting of SCSI subsystem MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Similarly to previous commit split out formatting of the SCSI subsystem related stuff. Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- src/conf/domain_conf.c | 83 ++++++++++++++++++++++++------------------ 1 file changed, 47 insertions(+), 36 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index f3b0d16025..873e4cdfe6 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -26101,6 +26101,51 @@ virDomainHostdevDefFormatSubsysPCI(virBufferPtr buf, } +static int +virDomainHostdevDefFormatSubsysSCSI(virBufferPtr buf, + virDomainHostdevDefPtr def, + unsigned int flags, + bool includeTypeInAddr, + virDomainXMLOptionPtr xmlopt) +{ + g_auto(virBuffer) sourceAttrBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) sourceChildBuf = VIR_BUFFER_INIT_CHILD(buf); + virDomainHostdevSubsysSCSIPtr scsisrc = &def->source.subsys.u.scsi; + virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host; + virDomainHostdevSubsysSCSIiSCSIPtr iscsisrc = &scsisrc->u.iscsi; + + if (scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI) { + virBufferAsprintf(&sourceAttrBuf, " protocol='%s' name='%s'", + virDomainHostdevSubsysSCSIProtocolTypeToString(scsisrc->protocol), + iscsisrc->src->path); + + virBufferAddLit(&sourceChildBuf, "src->hosts[0].name); + if (iscsisrc->src->hosts[0].port) + virBufferAsprintf(&sourceChildBuf, " port='%u'", iscsisrc->src->hosts[0].port); + virBufferAddLit(&sourceChildBuf, "/>\n"); + + if (virDomainDiskSourceFormatPrivateData(&sourceChildBuf, iscsisrc->src, + flags, xmlopt) < 0) + return -1; + + if (iscsisrc->src->auth) + virStorageAuthDefFormat(&sourceChildBuf, iscsisrc->src->auth); + } else { + virBufferAsprintf(&sourceChildBuf, "\n", + scsihostsrc->adapter); + virBufferAsprintf(&sourceChildBuf, + "
\n", + includeTypeInAddr ? "type='scsi' " : "", + scsihostsrc->bus, scsihostsrc->target, + scsihostsrc->unit); + } + + virXMLFormatElement(buf, "source", &sourceAttrBuf, &sourceChildBuf); + return 0; +} + + static int virDomainHostdevDefFormatSubsys(virBufferPtr buf, virDomainHostdevDefPtr def, @@ -26110,11 +26155,8 @@ virDomainHostdevDefFormatSubsys(virBufferPtr buf, { g_auto(virBuffer) sourceAttrBuf = VIR_BUFFER_INITIALIZER; g_auto(virBuffer) sourceChildBuf = VIR_BUFFER_INIT_CHILD(buf); - virDomainHostdevSubsysSCSIPtr scsisrc = &def->source.subsys.u.scsi; virDomainHostdevSubsysSCSIVHostPtr hostsrc = &def->source.subsys.u.scsi_host; virDomainHostdevSubsysMediatedDevPtr mdevsrc = &def->source.subsys.u.mdev; - virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host; - virDomainHostdevSubsysSCSIiSCSIPtr iscsisrc = &scsisrc->u.iscsi; switch ((virDomainHostdevSubsysType) def->source.subsys.type) { case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB: @@ -26125,6 +26167,8 @@ virDomainHostdevDefFormatSubsys(virBufferPtr buf, return virDomainHostdevDefFormatSubsysPCI(buf, def, flags, includeTypeInAddr); case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: + return virDomainHostdevDefFormatSubsysSCSI(buf, def, flags, includeTypeInAddr, xmlopt); + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST: case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV: break; @@ -26136,15 +26180,6 @@ virDomainHostdevDefFormatSubsys(virBufferPtr buf, } - if (def->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI && - scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI) { - const char *protocol = - virDomainHostdevSubsysSCSIProtocolTypeToString(scsisrc->protocol); - - virBufferAsprintf(&sourceAttrBuf, " protocol='%s' name='%s'", - protocol, iscsisrc->src->path); - } - if (def->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST) { const char *protocol = virDomainHostdevSubsysSCSIHostProtocolTypeToString(hostsrc->protocol); @@ -26159,25 +26194,6 @@ virDomainHostdevDefFormatSubsys(virBufferPtr buf, case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI: break; case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: - if (scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI) { - virBufferAddLit(&sourceChildBuf, "src->hosts[0].name); - if (iscsisrc->src->hosts[0].port) - virBufferAsprintf(&sourceChildBuf, " port='%u'", iscsisrc->src->hosts[0].port); - virBufferAddLit(&sourceChildBuf, "/>\n"); - - if (virDomainDiskSourceFormatPrivateData(&sourceChildBuf, iscsisrc->src, - flags, xmlopt) < 0) - return -1; - } else { - virBufferAsprintf(&sourceChildBuf, "\n", - scsihostsrc->adapter); - virBufferAsprintf(&sourceChildBuf, - "
\n", - includeTypeInAddr ? "type='scsi' " : "", - scsihostsrc->bus, scsihostsrc->target, - scsihostsrc->unit); - } break; case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST: break; @@ -26192,11 +26208,6 @@ virDomainHostdevDefFormatSubsys(virBufferPtr buf, return -1; } - if (def->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI && - scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI && - iscsisrc->src->auth) - virStorageAuthDefFormat(&sourceChildBuf, iscsisrc->src->auth); - virXMLFormatElement(buf, "source", &sourceAttrBuf, &sourceChildBuf); return 0;