mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-08-28 19:41:16 +00:00
domain_conf: Add helpers to verify if device configuration is valid
This patch adds helpers that validate domain's device configuration. This will be needed later on to verify devices being hot-plugged to guests. If the guest has no USB bus, then it's not valid to plug a USB device to that guest.
This commit is contained in:
parent
0925189713
commit
317badb213
@ -13266,6 +13266,58 @@ error:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static bool
|
||||
virDomainDefHasUSB(virDomainDefPtr def)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < def->ncontrollers; i++) {
|
||||
if (def->controllers[i]->type == VIR_DOMAIN_CONTROLLER_TYPE_USB &&
|
||||
def->controllers[i]->model != VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool
|
||||
virDomainDeviceIsUSB(virDomainDeviceDefPtr dev)
|
||||
{
|
||||
int t = dev->type;
|
||||
if ((t == VIR_DOMAIN_DEVICE_DISK &&
|
||||
dev->data.disk->bus == VIR_DOMAIN_DISK_BUS_USB) ||
|
||||
(t == VIR_DOMAIN_DEVICE_CONTROLLER &&
|
||||
dev->data.controller->type == VIR_DOMAIN_CONTROLLER_TYPE_USB) ||
|
||||
(t == VIR_DOMAIN_DEVICE_INPUT &&
|
||||
dev->data.input->type == VIR_DOMAIN_INPUT_BUS_USB) ||
|
||||
(t == VIR_DOMAIN_DEVICE_HOSTDEV &&
|
||||
dev->data.hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS &&
|
||||
dev->data.hostdev->source.subsys.type ==
|
||||
VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB) ||
|
||||
(t == VIR_DOMAIN_DEVICE_HUB &&
|
||||
dev->data.hub->type == VIR_DOMAIN_HUB_TYPE_USB) ||
|
||||
(t == VIR_DOMAIN_DEVICE_REDIRDEV &&
|
||||
dev->data.redirdev->bus == VIR_DOMAIN_REDIRDEV_BUS_USB))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
int
|
||||
virDomainDefCompatibleDevice(virDomainDefPtr def,
|
||||
virDomainDeviceDefPtr dev)
|
||||
{
|
||||
if (!virDomainDefHasUSB(def) &&
|
||||
virDomainDeviceIsUSB(dev)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("Device configuration is not compatible: "
|
||||
"Domain has no USB bus support"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int virDomainSaveXML(const char *configDir,
|
||||
virDomainDefPtr def,
|
||||
const char *xml)
|
||||
|
@ -1972,6 +1972,9 @@ int virDomainDefFormatInternal(virDomainDefPtr def,
|
||||
unsigned int flags,
|
||||
virBufferPtr buf);
|
||||
|
||||
int virDomainDefCompatibleDevice(virDomainDefPtr def,
|
||||
virDomainDeviceDefPtr dev);
|
||||
|
||||
int virDomainCpuSetParse(const char *str,
|
||||
char sep,
|
||||
char *cpuset,
|
||||
|
@ -281,6 +281,7 @@ virDomainDefAddImplicitControllers;
|
||||
virDomainDefCheckABIStability;
|
||||
virDomainDefClearDeviceAliases;
|
||||
virDomainDefClearPCIAddresses;
|
||||
virDomainDefCompatibleDevice;
|
||||
virDomainDefFormat;
|
||||
virDomainDefFormatInternal;
|
||||
virDomainDefFree;
|
||||
|
Loading…
Reference in New Issue
Block a user