mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
Slightly refactor hostdev parsing / formating
Rename virDomainHostdevPartsParse to virDomainHostdevDefParseSubsys to reflect the fact that it only deals with hostdevs uing the traditional mode=subsystem, and not mode=capabilities Rename virDomainHostSourceFormat to virDomainHostdevDefFormatSubsys for the same reason. Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
parent
3f0010a673
commit
50897ffbb6
@ -2951,9 +2951,8 @@ out:
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
virDomainHostdevPartsParse(xmlNodePtr node,
|
virDomainHostdevDefParseXMLSubsys(xmlNodePtr node,
|
||||||
xmlXPathContextPtr ctxt,
|
xmlXPathContextPtr ctxt,
|
||||||
const char *mode,
|
|
||||||
const char *type,
|
const char *type,
|
||||||
virDomainHostdevDefPtr def,
|
virDomainHostdevDefPtr def,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
@ -2962,20 +2961,6 @@ virDomainHostdevPartsParse(xmlNodePtr node,
|
|||||||
char *managed = NULL;
|
char *managed = NULL;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
/* @mode is passed in separately from the caller, since an
|
|
||||||
* 'intelligent hostdev' has no place for 'mode' in the XML (it is
|
|
||||||
* always 'subsys').
|
|
||||||
*/
|
|
||||||
if (mode) {
|
|
||||||
if ((def->mode=virDomainHostdevModeTypeFromString(mode)) < 0) {
|
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
|
||||||
_("unknown hostdev mode '%s'"), mode);
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
def->mode = VIR_DOMAIN_HOSTDEV_MODE_SUBSYS;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* @managed can be read from the xml document - it is always an
|
/* @managed can be read from the xml document - it is always an
|
||||||
* attribute of the toplevel element, no matter what type of
|
* attribute of the toplevel element, no matter what type of
|
||||||
* element that might be (pure hostdev, or higher level device
|
* element that might be (pure hostdev, or higher level device
|
||||||
@ -4815,7 +4800,8 @@ virDomainActualNetDefParseXML(xmlNodePtr node,
|
|||||||
virReportOOMError();
|
virReportOOMError();
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
if (virDomainHostdevPartsParse(node, ctxt, NULL, addrtype,
|
hostdev->mode = VIR_DOMAIN_HOSTDEV_MODE_SUBSYS;
|
||||||
|
if (virDomainHostdevDefParseXMLSubsys(node, ctxt, addrtype,
|
||||||
hostdev, flags) < 0) {
|
hostdev, flags) < 0) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
@ -5205,7 +5191,8 @@ virDomainNetDefParseXML(virCapsPtr caps,
|
|||||||
virReportOOMError();
|
virReportOOMError();
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
if (virDomainHostdevPartsParse(node, ctxt, NULL, addrtype,
|
hostdev->mode = VIR_DOMAIN_HOSTDEV_MODE_SUBSYS;
|
||||||
|
if (virDomainHostdevDefParseXMLSubsys(node, ctxt, addrtype,
|
||||||
hostdev, flags) < 0) {
|
hostdev, flags) < 0) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
@ -7375,9 +7362,27 @@ virDomainHostdevDefParseXML(const xmlNodePtr node,
|
|||||||
if (!(def = virDomainHostdevDefAlloc()))
|
if (!(def = virDomainHostdevDefAlloc()))
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
/* parse managed/mode/type, and the <source> element */
|
if (mode) {
|
||||||
if (virDomainHostdevPartsParse(node, ctxt, mode, type, def, flags) < 0)
|
if ((def->mode = virDomainHostdevModeTypeFromString(mode)) < 0) {
|
||||||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
|
_("unknown hostdev mode '%s'"), mode);
|
||||||
goto error;
|
goto error;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
def->mode = VIR_DOMAIN_HOSTDEV_MODE_SUBSYS;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (def->mode) {
|
||||||
|
case VIR_DOMAIN_HOSTDEV_MODE_SUBSYS:
|
||||||
|
/* parse managed/mode/type, and the <source> element */
|
||||||
|
if (virDomainHostdevDefParseXMLSubsys(node, ctxt, type, def, flags) < 0)
|
||||||
|
goto error;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
|
_("Unexpected hostdev mode %d"), def->mode);
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
if (def->info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) {
|
if (def->info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) {
|
||||||
if (virDomainDeviceInfoParseXML(node, bootMap, def->info,
|
if (virDomainDeviceInfoParseXML(node, bootMap, def->info,
|
||||||
@ -12394,7 +12399,7 @@ virDomainFSDefFormat(virBufferPtr buf,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
virDomainHostdevSourceFormat(virBufferPtr buf,
|
virDomainHostdevDefFormatSubsys(virBufferPtr buf,
|
||||||
virDomainHostdevDefPtr def,
|
virDomainHostdevDefPtr def,
|
||||||
unsigned int flags,
|
unsigned int flags,
|
||||||
bool includeTypeInAddr)
|
bool includeTypeInAddr)
|
||||||
@ -12515,7 +12520,7 @@ virDomainActualNetDefFormat(virBufferPtr buf,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case VIR_DOMAIN_NET_TYPE_HOSTDEV:
|
case VIR_DOMAIN_NET_TYPE_HOSTDEV:
|
||||||
if (virDomainHostdevSourceFormat(buf, &def->data.hostdev.def,
|
if (virDomainHostdevDefFormatSubsys(buf, &def->data.hostdev.def,
|
||||||
flags, true) < 0) {
|
flags, true) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -12624,7 +12629,7 @@ virDomainNetDefFormat(virBufferPtr buf,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case VIR_DOMAIN_NET_TYPE_HOSTDEV:
|
case VIR_DOMAIN_NET_TYPE_HOSTDEV:
|
||||||
if (virDomainHostdevSourceFormat(buf, &def->data.hostdev.def,
|
if (virDomainHostdevDefFormatSubsys(buf, &def->data.hostdev.def,
|
||||||
flags, true) < 0) {
|
flags, true) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -13520,28 +13525,38 @@ virDomainHostdevDefFormat(virBufferPtr buf,
|
|||||||
const char *mode = virDomainHostdevModeTypeToString(def->mode);
|
const char *mode = virDomainHostdevModeTypeToString(def->mode);
|
||||||
const char *type;
|
const char *type;
|
||||||
|
|
||||||
if (!mode || def->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS) {
|
if (!mode) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("unexpected hostdev mode %d"), def->mode);
|
_("unexpected hostdev mode %d"), def->mode);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch (def->mode) {
|
||||||
|
case VIR_DOMAIN_HOSTDEV_MODE_SUBSYS:
|
||||||
type = virDomainHostdevSubsysTypeToString(def->source.subsys.type);
|
type = virDomainHostdevSubsysTypeToString(def->source.subsys.type);
|
||||||
if (!type ||
|
if (!type) {
|
||||||
(def->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB &&
|
|
||||||
def->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI)) {
|
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("unexpected hostdev type %d"),
|
_("unexpected hostdev type %d"),
|
||||||
def->source.subsys.type);
|
def->source.subsys.type);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
|
_("unexpected hostdev mode %d"), def->mode);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
virBufferAsprintf(buf, " <hostdev mode='%s' type='%s' managed='%s'>\n",
|
virBufferAsprintf(buf, " <hostdev mode='%s' type='%s' managed='%s'>\n",
|
||||||
mode, type, def->managed ? "yes" : "no");
|
mode, type, def->managed ? "yes" : "no");
|
||||||
|
|
||||||
virBufferAdjustIndent(buf, 6);
|
virBufferAdjustIndent(buf, 6);
|
||||||
if (virDomainHostdevSourceFormat(buf, def, flags, false) < 0)
|
switch (def->mode) {
|
||||||
|
case VIR_DOMAIN_HOSTDEV_MODE_SUBSYS:
|
||||||
|
if (virDomainHostdevDefFormatSubsys(buf, def, flags, false) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
virBufferAdjustIndent(buf, -6);
|
virBufferAdjustIndent(buf, -6);
|
||||||
|
|
||||||
if (virDomainDeviceInfoFormat(buf, def->info,
|
if (virDomainDeviceInfoFormat(buf, def->info,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user