conf: Make net model enum compare case insensitive

vbox and vmx drivers do net case insensitive net model comparisons,
so for example 'VMXNET3' and 'vmxnet3' and 'VmxNeT3' in the XML will
translate to the same driver configuration. To convert these drivers
to use net model enum, we will need to do case insensitive comparisons
as well.

Essentially we implement virEnumToString, but with case insensitive
comparison. XML will always be formatted with the enum model string
we track internally, but we will accept any case insensitive variant.

Acked-by: Michal Privoznik <mprivozn@redhat.com>
Signed-off-by: Cole Robinson <crobinso@redhat.com>
This commit is contained in:
Cole Robinson 2019-03-13 11:02:41 -04:00
parent 41b002f934
commit 79c8bc7d6e
2 changed files with 11 additions and 4 deletions

View File

@ -29503,14 +29503,20 @@ int
virDomainNetSetModelString(virDomainNetDefPtr net,
const char *model)
{
VIR_FREE(net->modelstr);
if ((net->model = virDomainNetModelTypeFromString(model)) >= 0)
return 0;
size_t i;
VIR_FREE(net->modelstr);
net->model = VIR_DOMAIN_NET_MODEL_UNKNOWN;
if (!model)
return 0;
for (i = 0; i < ARRAY_CARDINALITY(virDomainNetModelTypeList); i++) {
if (STRCASEEQ(virDomainNetModelTypeList[i], model)) {
net->model = i;
return 0;
}
}
if (strspn(model, NET_MODEL_CHARS) < strlen(model)) {
virReportError(VIR_ERR_INVALID_ARG, "%s",
_("Model name contains invalid characters"));

View File

@ -21,7 +21,8 @@
</interface>
<interface type='user'>
<mac address='00:11:22:33:44:58'/>
<model type='virtio'/>
<!-- explicitly testing case insensitive model compare -->
<model type='ViRtIo'/>
</interface>
<interface type='user'>
<mac address='00:11:22:33:44:58'/>