mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
Add optional model attribute to the controller element
This is a step towards controller support for the ESX driver.
This commit is contained in:
parent
f8f29b1fc2
commit
c391291244
@ -670,6 +670,15 @@
|
|||||||
<attribute name="index">
|
<attribute name="index">
|
||||||
<ref name="unsignedInt"/>
|
<ref name="unsignedInt"/>
|
||||||
</attribute>
|
</attribute>
|
||||||
|
<optional>
|
||||||
|
<attribute name="model">
|
||||||
|
<choice>
|
||||||
|
<value>buslogic</value>
|
||||||
|
<value>lsilogic</value>
|
||||||
|
<value>lsisas1068</value>
|
||||||
|
</choice>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
<optional>
|
<optional>
|
||||||
<ref name="address"/>
|
<ref name="address"/>
|
||||||
</optional>
|
</optional>
|
||||||
|
@ -139,6 +139,11 @@ VIR_ENUM_IMPL(virDomainController, VIR_DOMAIN_CONTROLLER_TYPE_LAST,
|
|||||||
"sata",
|
"sata",
|
||||||
"virtio-serial")
|
"virtio-serial")
|
||||||
|
|
||||||
|
VIR_ENUM_IMPL(virDomainControllerModel, VIR_DOMAIN_CONTROLLER_MODEL_LAST,
|
||||||
|
"buslogic",
|
||||||
|
"lsilogic",
|
||||||
|
"lsisas1068")
|
||||||
|
|
||||||
VIR_ENUM_IMPL(virDomainFS, VIR_DOMAIN_FS_TYPE_LAST,
|
VIR_ENUM_IMPL(virDomainFS, VIR_DOMAIN_FS_TYPE_LAST,
|
||||||
"mount",
|
"mount",
|
||||||
"block",
|
"block",
|
||||||
@ -1670,6 +1675,7 @@ virDomainControllerDefParseXML(xmlNodePtr node,
|
|||||||
virDomainControllerDefPtr def;
|
virDomainControllerDefPtr def;
|
||||||
char *type = NULL;
|
char *type = NULL;
|
||||||
char *idx = NULL;
|
char *idx = NULL;
|
||||||
|
char *model = NULL;
|
||||||
|
|
||||||
if (VIR_ALLOC(def) < 0) {
|
if (VIR_ALLOC(def) < 0) {
|
||||||
virReportOOMError();
|
virReportOOMError();
|
||||||
@ -1694,6 +1700,17 @@ virDomainControllerDefParseXML(xmlNodePtr node,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
model = virXMLPropString(node, "model");
|
||||||
|
if (model) {
|
||||||
|
if ((def->model = virDomainControllerModelTypeFromString(model)) < 0) {
|
||||||
|
virDomainReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
|
_("Unknown model type '%s'"), model);
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
def->model = -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (virDomainDeviceInfoParseXML(node, &def->info, flags) < 0)
|
if (virDomainDeviceInfoParseXML(node, &def->info, flags) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
@ -1745,6 +1762,7 @@ virDomainControllerDefParseXML(xmlNodePtr node,
|
|||||||
cleanup:
|
cleanup:
|
||||||
VIR_FREE(type);
|
VIR_FREE(type);
|
||||||
VIR_FREE(idx);
|
VIR_FREE(idx);
|
||||||
|
VIR_FREE(model);
|
||||||
|
|
||||||
return def;
|
return def;
|
||||||
|
|
||||||
@ -4819,6 +4837,7 @@ static int virDomainDefMaybeAddController(virDomainDefPtr def,
|
|||||||
|
|
||||||
cont->type = type;
|
cont->type = type;
|
||||||
cont->idx = idx;
|
cont->idx = idx;
|
||||||
|
cont->model = -1;
|
||||||
|
|
||||||
if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL) {
|
if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL) {
|
||||||
cont->opts.vioserial.ports = -1;
|
cont->opts.vioserial.ports = -1;
|
||||||
@ -5232,6 +5251,7 @@ virDomainControllerDefFormat(virBufferPtr buf,
|
|||||||
int flags)
|
int flags)
|
||||||
{
|
{
|
||||||
const char *type = virDomainControllerTypeToString(def->type);
|
const char *type = virDomainControllerTypeToString(def->type);
|
||||||
|
const char *model = NULL;
|
||||||
|
|
||||||
if (!type) {
|
if (!type) {
|
||||||
virDomainReportError(VIR_ERR_INTERNAL_ERROR,
|
virDomainReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
@ -5239,10 +5259,24 @@ virDomainControllerDefFormat(virBufferPtr buf,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (def->model != -1) {
|
||||||
|
model = virDomainControllerModelTypeToString(def->model);
|
||||||
|
|
||||||
|
if (!model) {
|
||||||
|
virDomainReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
|
_("unexpected model type %d"), def->model);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
virBufferVSprintf(buf,
|
virBufferVSprintf(buf,
|
||||||
" <controller type='%s' index='%d'",
|
" <controller type='%s' index='%d'",
|
||||||
type, def->idx);
|
type, def->idx);
|
||||||
|
|
||||||
|
if (model) {
|
||||||
|
virBufferEscapeString(buf, " model='%s'", model);
|
||||||
|
}
|
||||||
|
|
||||||
switch (def->type) {
|
switch (def->type) {
|
||||||
case VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL:
|
case VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL:
|
||||||
if (def->opts.vioserial.ports != -1) {
|
if (def->opts.vioserial.ports != -1) {
|
||||||
|
@ -194,6 +194,15 @@ enum virDomainControllerType {
|
|||||||
VIR_DOMAIN_CONTROLLER_TYPE_LAST
|
VIR_DOMAIN_CONTROLLER_TYPE_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
enum virDomainControllerModel {
|
||||||
|
VIR_DOMAIN_CONTROLLER_MODEL_BUSLOGIC,
|
||||||
|
VIR_DOMAIN_CONTROLLER_MODEL_LSILOGIC,
|
||||||
|
VIR_DOMAIN_CONTROLLER_MODEL_LSISAS1068,
|
||||||
|
|
||||||
|
VIR_DOMAIN_CONTROLLER_MODEL_LAST
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct _virDomainVirtioSerialOpts virDomainVirtioSerialOpts;
|
typedef struct _virDomainVirtioSerialOpts virDomainVirtioSerialOpts;
|
||||||
typedef virDomainVirtioSerialOpts *virDomainVirtioSerialOptsPtr;
|
typedef virDomainVirtioSerialOpts *virDomainVirtioSerialOptsPtr;
|
||||||
struct _virDomainVirtioSerialOpts {
|
struct _virDomainVirtioSerialOpts {
|
||||||
@ -207,6 +216,7 @@ typedef virDomainControllerDef *virDomainControllerDefPtr;
|
|||||||
struct _virDomainControllerDef {
|
struct _virDomainControllerDef {
|
||||||
int type;
|
int type;
|
||||||
int idx;
|
int idx;
|
||||||
|
int model; /* -1 == undef */
|
||||||
union {
|
union {
|
||||||
virDomainVirtioSerialOpts vioserial;
|
virDomainVirtioSerialOpts vioserial;
|
||||||
} opts;
|
} opts;
|
||||||
@ -1073,6 +1083,7 @@ VIR_ENUM_DECL(virDomainDiskBus)
|
|||||||
VIR_ENUM_DECL(virDomainDiskCache)
|
VIR_ENUM_DECL(virDomainDiskCache)
|
||||||
VIR_ENUM_DECL(virDomainDiskErrorPolicy)
|
VIR_ENUM_DECL(virDomainDiskErrorPolicy)
|
||||||
VIR_ENUM_DECL(virDomainController)
|
VIR_ENUM_DECL(virDomainController)
|
||||||
|
VIR_ENUM_DECL(virDomainControllerModel)
|
||||||
VIR_ENUM_DECL(virDomainFS)
|
VIR_ENUM_DECL(virDomainFS)
|
||||||
VIR_ENUM_DECL(virDomainNet)
|
VIR_ENUM_DECL(virDomainNet)
|
||||||
VIR_ENUM_DECL(virDomainChrTarget)
|
VIR_ENUM_DECL(virDomainChrTarget)
|
||||||
|
@ -7270,6 +7270,7 @@ qemuDomainFindOrCreateSCSIDiskController(struct qemud_driver *driver,
|
|||||||
}
|
}
|
||||||
cont->type = VIR_DOMAIN_CONTROLLER_TYPE_SCSI;
|
cont->type = VIR_DOMAIN_CONTROLLER_TYPE_SCSI;
|
||||||
cont->idx = 0;
|
cont->idx = 0;
|
||||||
|
cont->model = -1;
|
||||||
|
|
||||||
VIR_INFO0("No SCSI controller present, hotplugging one");
|
VIR_INFO0("No SCSI controller present, hotplugging one");
|
||||||
if (qemudDomainAttachPciControllerDevice(driver,
|
if (qemudDomainAttachPciControllerDevice(driver,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user