On Fri, Aug 26, 2011 at 01:44:18AM +0300, Marc-André Lureau wrote:
---
src/conf/domain_conf.c | 26 +++++++++++++++++++++++---
src/conf/domain_conf.h | 18 ++++++++++--------
src/esx/esx_driver.c | 8 ++++----
src/libvirt_private.syms | 4 ++--
src/vmx/vmx.c | 32 ++++++++++++++++----------------
tests/xml2vmxtest.c | 2 +-
6 files changed, 56 insertions(+), 34 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index ce1f3c5..5e91d54 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -195,7 +195,7 @@ VIR_ENUM_IMPL(virDomainController, VIR_DOMAIN_CONTROLLER_TYPE_LAST,
"virtio-serial",
"ccid")
-VIR_ENUM_IMPL(virDomainControllerModel, VIR_DOMAIN_CONTROLLER_MODEL_LAST,
+VIR_ENUM_IMPL(virDomainControllerModelSCSI, VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST,
"auto",
"buslogic",
"lsilogic",
@@ -2455,6 +2455,16 @@ no_memory:
}
+static int
+virDomainControllerModelTypeFromString(const virDomainControllerDefPtr def,
+ const char *model)
+{
+ if (def->type == VIR_DOMAIN_CONTROLLER_TYPE_SCSI)
+ return virDomainControllerModelSCSITypeFromString(model);
+
+ return -1;
+}
+
/* Parse the XML definition for a controller
* @param node XML nodeset to parse for controller definition
*/
@@ -2492,7 +2502,7 @@ virDomainControllerDefParseXML(xmlNodePtr node,
model = virXMLPropString(node, "model");
if (model) {
- if ((def->model = virDomainControllerModelTypeFromString(model)) < 0) {
+ if ((def->model = virDomainControllerModelTypeFromString(def, model)) < 0)
{
virDomainReportError(VIR_ERR_INTERNAL_ERROR,
_("Unknown model type '%s'"),
model);
goto error;
@@ -8733,6 +8743,16 @@ virDomainDiskDefFormat(virBufferPtr buf,
return 0;
}
+static const char *
+virDomainControllerModelTypeToString(virDomainControllerDefPtr def,
+ int model)
+{
+ if (def->type == VIR_DOMAIN_CONTROLLER_TYPE_SCSI)
+ return virDomainControllerModelSCSITypeToString(model);
+
+ return NULL;
+}
+
static int
virDomainControllerDefFormat(virBufferPtr buf,
virDomainControllerDefPtr def,
@@ -8748,7 +8768,7 @@ virDomainControllerDefFormat(virBufferPtr buf,
}
if (def->model != -1) {
- model = virDomainControllerModelTypeToString(def->model);
+ model = virDomainControllerModelTypeToString(def, def->model);
if (!model) {
virDomainReportError(VIR_ERR_INTERNAL_ERROR,
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 2cc9b06..8a4cd11 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -257,14 +257,16 @@ enum virDomainControllerType {
};
-enum virDomainControllerModel {
- VIR_DOMAIN_CONTROLLER_MODEL_AUTO,
- VIR_DOMAIN_CONTROLLER_MODEL_BUSLOGIC,
- VIR_DOMAIN_CONTROLLER_MODEL_LSILOGIC,
- VIR_DOMAIN_CONTROLLER_MODEL_LSISAS1068,
- VIR_DOMAIN_CONTROLLER_MODEL_VMPVSCSI,
+enum virDomainControllerModelSCSI {
+ VIR_DOMAIN_CONTROLLER_MODEL_SCSI_AUTO,
+ VIR_DOMAIN_CONTROLLER_MODEL_SCSI_BUSLOGIC,
+ VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC,
+ VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1068,
+ VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VMPVSCSI,
+
+ VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST
+};
- VIR_DOMAIN_CONTROLLER_MODEL_LAST
};
typedef struct _virDomainVirtioSerialOpts virDomainVirtioSerialOpts;
@@ -1673,7 +1675,7 @@ VIR_ENUM_DECL(virDomainDiskIo)
VIR_ENUM_DECL(virDomainIoEventFd)
VIR_ENUM_DECL(virDomainVirtioEventIdx)
VIR_ENUM_DECL(virDomainController)
-VIR_ENUM_DECL(virDomainControllerModel)
+VIR_ENUM_DECL(virDomainControllerModelSCSI)
VIR_ENUM_DECL(virDomainFS)
VIR_ENUM_DECL(virDomainFSAccessMode)
VIR_ENUM_DECL(virDomainNet)
diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c
index c097651..e603399 100644
--- a/src/esx/esx_driver.c
+++ b/src/esx/esx_driver.c
@@ -412,16 +412,16 @@ esxAutodetectSCSIControllerModel(virDomainDiskDefPtr def, int
*model,
if (STRCASEEQ(vmDiskFileInfo->controllerType,
"VirtualBusLogicController")) {
- *model = VIR_DOMAIN_CONTROLLER_MODEL_BUSLOGIC;
+ *model = VIR_DOMAIN_CONTROLLER_MODEL_SCSI_BUSLOGIC;
} else if (STRCASEEQ(vmDiskFileInfo->controllerType,
"VirtualLsiLogicController")) {
- *model = VIR_DOMAIN_CONTROLLER_MODEL_LSILOGIC;
+ *model = VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC;
} else if (STRCASEEQ(vmDiskFileInfo->controllerType,
"VirtualLsiLogicSASController")) {
- *model = VIR_DOMAIN_CONTROLLER_MODEL_LSISAS1068;
+ *model = VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1068;
} else if (STRCASEEQ(vmDiskFileInfo->controllerType,
"ParaVirtualSCSIController")) {
- *model = VIR_DOMAIN_CONTROLLER_MODEL_VMPVSCSI;
+ *model = VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VMPVSCSI;
} else {
ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Found unexpected controller model '%s' for disk
'%s'"),
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index acae122..91ecd7b 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -248,8 +248,8 @@ virDomainConfigFile;
virDomainControllerDefFree;
virDomainControllerInsert;
virDomainControllerInsertPreAlloced;
-virDomainControllerModelTypeFromString;
-virDomainControllerModelTypeToString;
+virDomainControllerModelSCSITypeFromString;
+virDomainControllerModelSCSITypeToString;
virDomainControllerTypeToString;
virDomainCpuSetFormat;
virDomainCpuSetParse;
diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c
index 08c2716..dff3599 100644
--- a/src/vmx/vmx.c
+++ b/src/vmx/vmx.c
@@ -483,8 +483,8 @@ def->parallels[0]...
/* directly map the virDomainControllerModel to virVMXSCSIControllerModel,
* this is good enough for now because all virDomainControllerModel values
* are actually SCSI controller models in the ESX case */
-VIR_ENUM_DECL(virVMXSCSIControllerModel)
-VIR_ENUM_IMPL(virVMXSCSIControllerModel, VIR_DOMAIN_CONTROLLER_MODEL_LAST,
+VIR_ENUM_DECL(virVMXControllerModelSCSI)
+VIR_ENUM_IMPL(virVMXControllerModelSCSI, VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST,
"auto", /* just to match virDomainControllerModel, will never be
used */
"buslogic",
"lsilogic",
@@ -1040,7 +1040,7 @@ virVMXHandleLegacySCSIDiskDriverName(virDomainDefPtr def,
*tmp = c_tolower(*tmp);
}
- model = virDomainControllerModelTypeFromString(disk->driverName);
+ model = virDomainControllerModelSCSITypeFromString(disk->driverName);
if (model < 0) {
VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
@@ -1068,7 +1068,7 @@ virVMXHandleLegacySCSIDiskDriverName(virDomainDefPtr def,
VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Inconsistent SCSI controller model ('%s' is not
'%s') "
"for SCSI controller index %d"), disk->driverName,
- virDomainControllerModelTypeToString(controller->model),
+ virDomainControllerModelSCSITypeToString(controller->model),
controller->idx);
return -1;
}
@@ -1120,7 +1120,7 @@ virVMXGatherSCSIControllers(virVMXContext *ctx, virDomainDefPtr
def,
continue;
}
- if (controller->model == VIR_DOMAIN_CONTROLLER_MODEL_AUTO &&
+ if (controller->model == VIR_DOMAIN_CONTROLLER_MODEL_SCSI_AUTO &&
ctx->autodetectSCSIControllerModel != NULL) {
count = 0;
@@ -1157,15 +1157,15 @@ virVMXGatherSCSIControllers(virVMXContext *ctx, virDomainDefPtr
def,
}
if (controller->model != -1 &&
- controller->model != VIR_DOMAIN_CONTROLLER_MODEL_BUSLOGIC &&
- controller->model != VIR_DOMAIN_CONTROLLER_MODEL_LSILOGIC &&
- controller->model != VIR_DOMAIN_CONTROLLER_MODEL_LSISAS1068 &&
- controller->model != VIR_DOMAIN_CONTROLLER_MODEL_VMPVSCSI) {
+ controller->model != VIR_DOMAIN_CONTROLLER_MODEL_SCSI_BUSLOGIC
&&
+ controller->model != VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC
&&
+ controller->model != VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1068
&&
+ controller->model != VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VMPVSCSI) {
VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting domain XML attribute 'model' of entry
"
"'controller' to be 'buslogic' or
'lsilogic' or "
"'lsisas1068' or 'vmpvscsi' but found
'%s'"),
- virDomainControllerModelTypeToString(controller->model));
+ virDomainControllerModelSCSITypeToString(controller->model));
goto cleanup;
}
@@ -1869,13 +1869,13 @@ virVMXParseSCSIController(virConfPtr conf, int controller, bool
*present,
*tmp = c_tolower(*tmp);
}
- *virtualDev = virVMXSCSIControllerModelTypeFromString(virtualDev_string);
+ *virtualDev = virVMXControllerModelSCSITypeFromString(virtualDev_string);
if (*virtualDev == -1 ||
- (*virtualDev != VIR_DOMAIN_CONTROLLER_MODEL_BUSLOGIC &&
- *virtualDev != VIR_DOMAIN_CONTROLLER_MODEL_LSILOGIC &&
- *virtualDev != VIR_DOMAIN_CONTROLLER_MODEL_LSISAS1068 &&
- *virtualDev != VIR_DOMAIN_CONTROLLER_MODEL_VMPVSCSI)) {
+ (*virtualDev != VIR_DOMAIN_CONTROLLER_MODEL_SCSI_BUSLOGIC &&
+ *virtualDev != VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC &&
+ *virtualDev != VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1068 &&
+ *virtualDev != VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VMPVSCSI)) {
VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting VMX entry '%s' to be 'buslogic'
or 'lsilogic' "
"or 'lsisas1068' or 'pvscsi' but found
'%s'"),
@@ -3088,7 +3088,7 @@ virVMXFormatConfig(virVMXContext *ctx, virCapsPtr caps,
virDomainDefPtr def,
if (scsi_virtualDev[i] != -1) {
virBufferAsprintf(&buffer, "scsi%d.virtualDev =
\"%s\"\n", i,
- virVMXSCSIControllerModelTypeToString
+ virVMXControllerModelSCSITypeToString
(scsi_virtualDev[i]));
}
}
diff --git a/tests/xml2vmxtest.c b/tests/xml2vmxtest.c
index 439ddc8..77b1611 100644
--- a/tests/xml2vmxtest.c
+++ b/tests/xml2vmxtest.c
@@ -143,7 +143,7 @@ static int
testAutodetectSCSIControllerModel(virDomainDiskDefPtr def ATTRIBUTE_UNUSED,
int *model, void *opaque ATTRIBUTE_UNUSED)
{
- *model = VIR_DOMAIN_CONTROLLER_MODEL_LSILOGIC;
+ *model = VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC;
return 0;
}
ACK
Daniel
--
|:
http://berrange.com -o-
http://www.flickr.com/photos/dberrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|:
http://entangle-photo.org -o-
http://live.gnome.org/gtk-vnc :|