switch (def->mode) {
case VIR_DOMAIN_HOSTDEV_MODE_CAPABILITIES:
- switch ((virDomainHostdevCapsType) def->source.caps.type) {
+ switch (def->source.caps.type) {
case VIR_DOMAIN_HOSTDEV_CAPS_TYPE_STORAGE:
VIR_FREE(def->source.caps.u.storage.block);
break;
static int
virDomainHostdevDefParseXMLCaps(xmlNodePtr node G_GNUC_UNUSED,
xmlXPathContextPtr ctxt,
- const char *type,
+ virDomainHostdevCapsType type,
virDomainHostdevDef *def)
{
/* @type is passed in from the caller rather than read from the
* <hostdev>. (the functions we're going to call expect address
* type to already be known).
*/
- if (!type) {
- virReportError(VIR_ERR_XML_ERROR,
- "%s", _("missing source address type"));
- return -1;
- }
-
- if ((def->source.caps.type = virDomainHostdevCapsTypeFromString(type)) < 0) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("unknown host device source address type '%1$s'"),
- type);
- return -1;
- }
+ def->source.caps.type = type;
if (!virXPathNode("./source", ctxt)) {
virReportError(VIR_ERR_XML_ERROR, "%s",
ctxt, &def->source.caps.u.net.ip) < 0)
return -1;
break;
+ case VIR_DOMAIN_HOSTDEV_CAPS_TYPE_LAST:
default:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("address type='%1$s' not supported in hostdev interfaces"),
virDomainHostdevDef *def;
VIR_XPATH_NODE_AUTORESTORE(ctxt)
g_autofree char *type = virXMLPropString(node, "type");
+ unsigned int typeU;
ctxt->node = node;
break;
case VIR_DOMAIN_HOSTDEV_MODE_CAPABILITIES:
/* parse managed/mode/type, and the <source> element */
- if (virDomainHostdevDefParseXMLCaps(node, ctxt, type, def) < 0)
+ if (virXMLPropEnum(node, "type",
+ virDomainHostdevCapsTypeFromString,
+ VIR_XML_PROP_REQUIRED, &typeU) < 0)
+ goto error;
+
+ if (virDomainHostdevDefParseXMLCaps(node, ctxt, typeU, def) < 0)
goto error;
break;
default:
return virDomainHostdevMatchCapsMisc(a, b);
case VIR_DOMAIN_HOSTDEV_CAPS_TYPE_NET:
return virDomainHostdevMatchCapsNet(a, b);
+ case VIR_DOMAIN_HOSTDEV_CAPS_TYPE_LAST:
+ break;
}
return 0;
}
virBufferEscapeString(buf, "<interface>%s</interface>\n",
def->source.caps.u.net.ifname);
break;
+ case VIR_DOMAIN_HOSTDEV_CAPS_TYPE_LAST:
default:
virReportError(VIR_ERR_INTERNAL_ERROR,
_("unexpected hostdev type %1$d"),
case VIR_DOMAIN_HOSTDEV_CAPS_TYPE_MISC:
return lxcDomainAttachDeviceHostdevMiscLive(driver, vm, dev);
+ case VIR_DOMAIN_HOSTDEV_CAPS_TYPE_NET:
+ case VIR_DOMAIN_HOSTDEV_CAPS_TYPE_LAST:
default:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("Unsupported host device type %1$s"),
case VIR_DOMAIN_HOSTDEV_CAPS_TYPE_MISC:
return lxcDomainDetachDeviceHostdevMiscLive(vm, dev);
+ case VIR_DOMAIN_HOSTDEV_CAPS_TYPE_NET:
+ case VIR_DOMAIN_HOSTDEV_CAPS_TYPE_LAST:
default:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("Unsupported host device type %1$s"),