mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 11:22:23 +00:00
virDomainHostdevDefFormatSubsys: Split out formatting of USB subsystem
Separate out bits related to USB so that the logic isn't entangled in multiple conditional statements. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
6885542369
commit
f551294506
@ -26023,6 +26023,40 @@ virDomainNetIPInfoFormat(virBufferPtr buf,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
virDomainHostdevDefFormatSubsysUSB(virBufferPtr buf,
|
||||||
|
virDomainHostdevDefPtr def,
|
||||||
|
unsigned int flags,
|
||||||
|
bool includeTypeInAddr)
|
||||||
|
{
|
||||||
|
g_auto(virBuffer) sourceAttrBuf = VIR_BUFFER_INITIALIZER;
|
||||||
|
g_auto(virBuffer) sourceChildBuf = VIR_BUFFER_INIT_CHILD(buf);
|
||||||
|
virDomainHostdevSubsysUSBPtr usbsrc = &def->source.subsys.u.usb;
|
||||||
|
|
||||||
|
if (def->startupPolicy)
|
||||||
|
virBufferAsprintf(&sourceAttrBuf, " startupPolicy='%s'",
|
||||||
|
virDomainStartupPolicyTypeToString(def->startupPolicy));
|
||||||
|
|
||||||
|
if (usbsrc->autoAddress && (flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE))
|
||||||
|
virBufferAddLit(&sourceAttrBuf, " autoAddress='yes'");
|
||||||
|
|
||||||
|
if (def->missing && !(flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE))
|
||||||
|
virBufferAddLit(&sourceAttrBuf, " missing='yes'");
|
||||||
|
|
||||||
|
if (usbsrc->vendor) {
|
||||||
|
virBufferAsprintf(&sourceChildBuf, "<vendor id='0x%.4x'/>\n", usbsrc->vendor);
|
||||||
|
virBufferAsprintf(&sourceChildBuf, "<product id='0x%.4x'/>\n", usbsrc->product);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (usbsrc->bus || usbsrc->device)
|
||||||
|
virBufferAsprintf(&sourceChildBuf, "<address %sbus='%d' device='%d'/>\n",
|
||||||
|
includeTypeInAddr ? "type='usb' " : "",
|
||||||
|
usbsrc->bus, usbsrc->device);
|
||||||
|
|
||||||
|
virXMLFormatElement(buf, "source", &sourceAttrBuf, &sourceChildBuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
virDomainHostdevDefFormatSubsys(virBufferPtr buf,
|
virDomainHostdevDefFormatSubsys(virBufferPtr buf,
|
||||||
virDomainHostdevDefPtr def,
|
virDomainHostdevDefPtr def,
|
||||||
@ -26033,7 +26067,6 @@ virDomainHostdevDefFormatSubsys(virBufferPtr buf,
|
|||||||
g_auto(virBuffer) sourceAttrBuf = VIR_BUFFER_INITIALIZER;
|
g_auto(virBuffer) sourceAttrBuf = VIR_BUFFER_INITIALIZER;
|
||||||
g_auto(virBuffer) sourceChildBuf = VIR_BUFFER_INIT_CHILD(buf);
|
g_auto(virBuffer) sourceChildBuf = VIR_BUFFER_INIT_CHILD(buf);
|
||||||
g_auto(virBuffer) origstatesChildBuf = VIR_BUFFER_INIT_CHILD(&sourceChildBuf);
|
g_auto(virBuffer) origstatesChildBuf = VIR_BUFFER_INIT_CHILD(&sourceChildBuf);
|
||||||
virDomainHostdevSubsysUSBPtr usbsrc = &def->source.subsys.u.usb;
|
|
||||||
virDomainHostdevSubsysPCIPtr pcisrc = &def->source.subsys.u.pci;
|
virDomainHostdevSubsysPCIPtr pcisrc = &def->source.subsys.u.pci;
|
||||||
virDomainHostdevSubsysSCSIPtr scsisrc = &def->source.subsys.u.scsi;
|
virDomainHostdevSubsysSCSIPtr scsisrc = &def->source.subsys.u.scsi;
|
||||||
virDomainHostdevSubsysSCSIVHostPtr hostsrc = &def->source.subsys.u.scsi_host;
|
virDomainHostdevSubsysSCSIVHostPtr hostsrc = &def->source.subsys.u.scsi_host;
|
||||||
@ -26041,6 +26074,23 @@ virDomainHostdevDefFormatSubsys(virBufferPtr buf,
|
|||||||
virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host;
|
virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host;
|
||||||
virDomainHostdevSubsysSCSIiSCSIPtr iscsisrc = &scsisrc->u.iscsi;
|
virDomainHostdevSubsysSCSIiSCSIPtr iscsisrc = &scsisrc->u.iscsi;
|
||||||
|
|
||||||
|
switch ((virDomainHostdevSubsysType) def->source.subsys.type) {
|
||||||
|
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB:
|
||||||
|
virDomainHostdevDefFormatSubsysUSB(buf, def, flags, includeTypeInAddr);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI:
|
||||||
|
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI:
|
||||||
|
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST:
|
||||||
|
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST:
|
||||||
|
default:
|
||||||
|
virReportEnumRangeError(virDomainHostdevSubsysType, def->source.subsys.type);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (def->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI &&
|
if (def->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI &&
|
||||||
pcisrc->backend != VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT) {
|
pcisrc->backend != VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT) {
|
||||||
const char *backend =
|
const char *backend =
|
||||||
@ -26055,18 +26105,6 @@ virDomainHostdevDefFormatSubsys(virBufferPtr buf,
|
|||||||
virBufferAsprintf(buf, "<driver name='%s'/>\n", backend);
|
virBufferAsprintf(buf, "<driver name='%s'/>\n", backend);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (def->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB) {
|
|
||||||
if (def->startupPolicy) {
|
|
||||||
const char *policy;
|
|
||||||
policy = virDomainStartupPolicyTypeToString(def->startupPolicy);
|
|
||||||
virBufferAsprintf(&sourceAttrBuf, " startupPolicy='%s'", policy);
|
|
||||||
}
|
|
||||||
if (usbsrc->autoAddress && (flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE))
|
|
||||||
virBufferAddLit(&sourceAttrBuf, " autoAddress='yes'");
|
|
||||||
|
|
||||||
if (def->missing && !(flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE))
|
|
||||||
virBufferAddLit(&sourceAttrBuf, " missing='yes'");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (def->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI &&
|
if (def->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI &&
|
||||||
scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI) {
|
scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI) {
|
||||||
@ -26087,15 +26125,6 @@ virDomainHostdevDefFormatSubsys(virBufferPtr buf,
|
|||||||
|
|
||||||
switch (def->source.subsys.type) {
|
switch (def->source.subsys.type) {
|
||||||
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB:
|
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB:
|
||||||
if (usbsrc->vendor) {
|
|
||||||
virBufferAsprintf(&sourceChildBuf, "<vendor id='0x%.4x'/>\n", usbsrc->vendor);
|
|
||||||
virBufferAsprintf(&sourceChildBuf, "<product id='0x%.4x'/>\n", usbsrc->product);
|
|
||||||
}
|
|
||||||
if (usbsrc->bus || usbsrc->device) {
|
|
||||||
virBufferAsprintf(&sourceChildBuf, "<address %sbus='%d' device='%d'/>\n",
|
|
||||||
includeTypeInAddr ? "type='usb' " : "",
|
|
||||||
usbsrc->bus, usbsrc->device);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI:
|
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI:
|
||||||
virPCIDeviceAddressFormat(&sourceChildBuf, pcisrc->addr,
|
virPCIDeviceAddressFormat(&sourceChildBuf, pcisrc->addr,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user