diff --git a/src/conf/domain_audit.c b/src/conf/domain_audit.c index d4d303a214..0bf1768acd 100644 --- a/src/conf/domain_audit.c +++ b/src/conf/domain_audit.c @@ -428,6 +428,8 @@ virDomainAuditHostdev(virDomainObj *vm, virDomainHostdevDef *hostdev, virt, reason, vmname, uuidstr, device); break; + case VIR_DOMAIN_HOSTDEV_CAPS_TYPE_NET: + case VIR_DOMAIN_HOSTDEV_CAPS_TYPE_LAST: default: VIR_WARN("Unexpected hostdev type while encoding audit message: %d", hostdev->source.caps.type); diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index c93f89ced6..cf1bd4df74 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -2616,7 +2616,7 @@ virDomainHostdevDefClear(virDomainHostdevDef *def) 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; @@ -6502,7 +6502,7 @@ virDomainNetDefCoalesceFormatXML(virBuffer *buf, 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 @@ -6513,18 +6513,7 @@ virDomainHostdevDefParseXMLCaps(xmlNodePtr node G_GNUC_UNUSED, * . (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", @@ -6560,6 +6549,7 @@ virDomainHostdevDefParseXMLCaps(xmlNodePtr node G_GNUC_UNUSED, 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"), @@ -12920,6 +12910,7 @@ virDomainHostdevDefParseXML(virDomainXMLOption *xmlopt, virDomainHostdevDef *def; VIR_XPATH_NODE_AUTORESTORE(ctxt) g_autofree char *type = virXMLPropString(node, "type"); + unsigned int typeU; ctxt->node = node; @@ -12940,7 +12931,12 @@ virDomainHostdevDefParseXML(virDomainXMLOption *xmlopt, break; case VIR_DOMAIN_HOSTDEV_MODE_CAPABILITIES: /* parse managed/mode/type, and the 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: @@ -14163,6 +14159,8 @@ virDomainHostdevMatchCaps(virDomainHostdevDef *a, 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; } @@ -23486,6 +23484,7 @@ virDomainHostdevDefFormatCaps(virBuffer *buf, virBufferEscapeString(buf, "%s\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"), diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 1f977ef1c8..0e76ff71ac 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -336,7 +336,7 @@ typedef enum { } virDomainHostdevCapsType; struct _virDomainHostdevCaps { - int type; /* enum virDOmainHostdevCapsType */ + virDomainHostdevCapsType type; union { struct { char *block; diff --git a/src/lxc/lxc_cgroup.c b/src/lxc/lxc_cgroup.c index 21d9b456e8..7c889667ba 100644 --- a/src/lxc/lxc_cgroup.c +++ b/src/lxc/lxc_cgroup.c @@ -309,6 +309,8 @@ static int virLXCCgroupSetupDeviceACL(virDomainDef *def, VIR_CGROUP_DEVICE_MKNOD, false) < 0) return -1; break; + case VIR_DOMAIN_HOSTDEV_CAPS_TYPE_NET: + case VIR_DOMAIN_HOSTDEV_CAPS_TYPE_LAST: default: break; } diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c index e2d67d504d..7e486d0f78 100644 --- a/src/lxc/lxc_controller.c +++ b/src/lxc/lxc_controller.c @@ -1804,6 +1804,7 @@ virLXCControllerSetupHostdevCaps(virDomainDef *vmDef, case VIR_DOMAIN_HOSTDEV_CAPS_TYPE_NET: return 0; /* case is handled in virLXCControllerMoveInterfaces */ + case VIR_DOMAIN_HOSTDEV_CAPS_TYPE_LAST: default: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Unsupported host device mode %1$s"), diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index fb0301b811..a9bdeba36d 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -3869,6 +3869,8 @@ lxcDomainAttachDeviceHostdevCapsLive(virLXCDriver *driver, 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"), @@ -4299,6 +4301,8 @@ lxcDomainDetachDeviceHostdevCapsLive(virDomainObj *vm, 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"), diff --git a/src/lxc/lxc_hostdev.c b/src/lxc/lxc_hostdev.c index af3ce3e0ac..2e06b516d4 100644 --- a/src/lxc/lxc_hostdev.c +++ b/src/lxc/lxc_hostdev.c @@ -90,6 +90,7 @@ int virLXCPrepareHostDevices(virLXCDriver *driver, case VIR_DOMAIN_HOSTDEV_CAPS_TYPE_MISC: case VIR_DOMAIN_HOSTDEV_CAPS_TYPE_NET: break; + case VIR_DOMAIN_HOSTDEV_CAPS_TYPE_LAST: default: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Unsupported hostdev type %1$s"), diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c index c3c92f3538..1fa5303495 100644 --- a/src/security/security_selinux.c +++ b/src/security/security_selinux.c @@ -2315,6 +2315,8 @@ virSecuritySELinuxSetHostdevCapsLabel(virSecurityManager *mgr, break; } + case VIR_DOMAIN_HOSTDEV_CAPS_TYPE_NET: + case VIR_DOMAIN_HOSTDEV_CAPS_TYPE_LAST: default: ret = 0; break; @@ -2538,6 +2540,8 @@ virSecuritySELinuxRestoreHostdevCapsLabel(virSecurityManager *mgr, break; } + case VIR_DOMAIN_HOSTDEV_CAPS_TYPE_NET: + case VIR_DOMAIN_HOSTDEV_CAPS_TYPE_LAST: default: ret = 0; break;