qemu: handle missing switch enum cases

Ensure all enum cases are listed in switch statements, or cast away
enum type in places where we don't wish to cover all cases.

Reviewed-by: John Ferlan <jferlan@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
Daniel P. Berrangé 2018-02-14 09:43:59 +00:00
parent d4bf8f4150
commit 7fef8e330d
6 changed files with 96 additions and 22 deletions

View File

@ -2632,7 +2632,7 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef,
case VIR_DOMAIN_CONTROLLER_TYPE_SCSI: case VIR_DOMAIN_CONTROLLER_TYPE_SCSI:
switch ((virDomainControllerModelSCSI) def->model) { switch ((virDomainControllerModelSCSI) def->model) {
case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI: case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI:
switch ((virDomainDeviceAddressType) address_type) { switch (address_type) {
case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW: case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW:
virBufferAddLit(&buf, "virtio-scsi-ccw"); virBufferAddLit(&buf, "virtio-scsi-ccw");
break; break;
@ -2684,7 +2684,7 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef,
break; break;
case VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL: case VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL:
switch ((virDomainDeviceAddressType) address_type) { switch (address_type) {
case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI: case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI:
virBufferAddLit(&buf, "virtio-serial-pci"); virBufferAddLit(&buf, "virtio-serial-pci");
break; break;
@ -3407,12 +3407,17 @@ qemuBuildNicDevStr(virDomainDefPtr def,
case VIR_DOMAIN_NET_VIRTIO_TX_MODE_TIMER: case VIR_DOMAIN_NET_VIRTIO_TX_MODE_TIMER:
virBufferAddLit(&buf, "timer"); virBufferAddLit(&buf, "timer");
break; break;
case VIR_DOMAIN_NET_VIRTIO_TX_MODE_DEFAULT:
break;
case VIR_DOMAIN_NET_VIRTIO_TX_MODE_LAST:
default: default:
/* this should never happen, if it does, we need /* this should never happen, if it does, we need
* to add another case to this switch. * to add another case to this switch.
*/ */
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", virReportEnumRangeError(virDomainNetVirtioTxModeType,
_("unrecognized virtio-net-pci 'tx' option")); net->driver.virtio.txmode);
goto error; goto error;
} }
} else { } else {
@ -6598,7 +6603,7 @@ qemuBuildGlobalControllerCommandLine(virCommandPtr cmd,
bool cap = false; bool cap = false;
bool machine = false; bool machine = false;
switch ((virDomainControllerModelPCI) cont->model) { switch (cont->model) {
case VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT: case VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT:
hoststr = "i440FX-pcihost"; hoststr = "i440FX-pcihost";
cap = virQEMUCapsGet(qemuCaps, QEMU_CAPS_I440FX_PCI_HOLE64_SIZE); cap = virQEMUCapsGet(qemuCaps, QEMU_CAPS_I440FX_PCI_HOLE64_SIZE);
@ -6941,7 +6946,7 @@ qemuBuildCpuCommandLine(virCommandPtr cmd,
if (cpu_flags && !cpu) { if (cpu_flags && !cpu) {
const char *default_model; const char *default_model;
switch (def->os.arch) { switch ((int)def->os.arch) {
case VIR_ARCH_I686: case VIR_ARCH_I686:
default_model = "qemu32"; default_model = "qemu32";
break; break;
@ -6987,7 +6992,7 @@ qemuBuildObsoleteAccelArg(virCommandPtr cmd,
bool disableKVM = false; bool disableKVM = false;
bool enableKVM = false; bool enableKVM = false;
switch (def->virtType) { switch ((int)def->virtType) {
case VIR_DOMAIN_VIRT_QEMU: case VIR_DOMAIN_VIRT_QEMU:
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
disableKVM = true; disableKVM = true;
@ -7955,8 +7960,13 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg,
case VIR_DOMAIN_GRAPHICS_SPICE_MOUSE_MODE_CLIENT: case VIR_DOMAIN_GRAPHICS_SPICE_MOUSE_MODE_CLIENT:
virBufferAddLit(&opt, "agent-mouse=on,"); virBufferAddLit(&opt, "agent-mouse=on,");
break; break;
default: case VIR_DOMAIN_GRAPHICS_SPICE_MOUSE_MODE_DEFAULT:
break; break;
case VIR_DOMAIN_GRAPHICS_SPICE_MOUSE_MODE_LAST:
default:
virReportEnumRangeError(virDomainGraphicsSpiceMouseMode,
graphics->data.spice.mousemode);
goto error;
} }
} }

View File

@ -2804,6 +2804,27 @@ qemuDomainDefAddDefaultDevices(virDomainDefPtr def,
addPCIRoot = true; addPCIRoot = true;
break; break;
case VIR_ARCH_ARMV6L:
case VIR_ARCH_ARMV7B:
case VIR_ARCH_CRIS:
case VIR_ARCH_ITANIUM:
case VIR_ARCH_LM32:
case VIR_ARCH_M68K:
case VIR_ARCH_MICROBLAZE:
case VIR_ARCH_MICROBLAZEEL:
case VIR_ARCH_MIPS:
case VIR_ARCH_MIPSEL:
case VIR_ARCH_MIPS64:
case VIR_ARCH_MIPS64EL:
case VIR_ARCH_OR32:
case VIR_ARCH_PARISC:
case VIR_ARCH_PARISC64:
case VIR_ARCH_PPCLE:
case VIR_ARCH_UNICORE32:
case VIR_ARCH_XTENSA:
case VIR_ARCH_XTENSAEB:
case VIR_ARCH_NONE:
case VIR_ARCH_LAST:
default: default:
break; break;
} }

View File

@ -3016,13 +3016,8 @@ qemuCompressGetCommand(virQEMUSaveFormat compression)
ret = virCommandNew(prog); ret = virCommandNew(prog);
virCommandAddArg(ret, "-dc"); virCommandAddArg(ret, "-dc");
switch (compression) { if (compression == QEMU_SAVE_FORMAT_LZOP)
case QEMU_SAVE_FORMAT_LZOP:
virCommandAddArg(ret, "--ignore-warn"); virCommandAddArg(ret, "--ignore-warn");
break;
default:
break;
}
return ret; return ret;
} }
@ -17792,11 +17787,18 @@ qemuDomainOpenGraphics(virDomainPtr dom,
case VIR_DOMAIN_GRAPHICS_TYPE_SPICE: case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
protocol = "spice"; protocol = "spice";
break; break;
default: case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("Can only open VNC or SPICE graphics backends, not %s"), _("Can only open VNC or SPICE graphics backends, not %s"),
virDomainGraphicsTypeToString(vm->def->graphics[idx]->type)); virDomainGraphicsTypeToString(vm->def->graphics[idx]->type));
goto endjob; goto endjob;
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
default:
virReportEnumRangeError(virDomainGraphicsType,
vm->def->graphics[idx]->type);
goto endjob;
} }
if (qemuSecuritySetImageFDLabel(driver->securityManager, vm->def, fd) < 0) if (qemuSecuritySetImageFDLabel(driver->securityManager, vm->def, fd) < 0)
@ -17856,11 +17858,18 @@ qemuDomainOpenGraphicsFD(virDomainPtr dom,
case VIR_DOMAIN_GRAPHICS_TYPE_SPICE: case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
protocol = "spice"; protocol = "spice";
break; break;
default: case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("Can only open VNC or SPICE graphics backends, not %s"), _("Can only open VNC or SPICE graphics backends, not %s"),
virDomainGraphicsTypeToString(vm->def->graphics[idx]->type)); virDomainGraphicsTypeToString(vm->def->graphics[idx]->type));
goto cleanup; goto cleanup;
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
default:
virReportEnumRangeError(virDomainGraphicsType,
vm->def->graphics[idx]->type);
goto cleanup;
} }
if (qemuSecuritySetSocketLabel(driver->securityManager, vm->def) < 0) if (qemuSecuritySetSocketLabel(driver->securityManager, vm->def) < 0)

View File

@ -2978,11 +2978,24 @@ qemuDomainChangeNetFilter(virDomainObjPtr vm,
case VIR_DOMAIN_NET_TYPE_BRIDGE: case VIR_DOMAIN_NET_TYPE_BRIDGE:
case VIR_DOMAIN_NET_TYPE_NETWORK: case VIR_DOMAIN_NET_TYPE_NETWORK:
break; break;
default: case VIR_DOMAIN_NET_TYPE_USER:
case VIR_DOMAIN_NET_TYPE_VHOSTUSER:
case VIR_DOMAIN_NET_TYPE_SERVER:
case VIR_DOMAIN_NET_TYPE_CLIENT:
case VIR_DOMAIN_NET_TYPE_MCAST:
case VIR_DOMAIN_NET_TYPE_INTERNAL:
case VIR_DOMAIN_NET_TYPE_DIRECT:
case VIR_DOMAIN_NET_TYPE_HOSTDEV:
case VIR_DOMAIN_NET_TYPE_UDP:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("filters not supported on interfaces of type %s"), _("filters not supported on interfaces of type %s"),
virDomainNetTypeToString(virDomainNetGetActualType(newdev))); virDomainNetTypeToString(virDomainNetGetActualType(newdev)));
return -1; return -1;
case VIR_DOMAIN_NET_TYPE_LAST:
default:
virReportEnumRangeError(virDomainNetType,
virDomainNetGetActualType(newdev));
return -1;
} }
virDomainConfNWFilterTeardown(olddev); virDomainConfNWFilterTeardown(olddev);
@ -3277,12 +3290,16 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
/* all handled in common code directly below this switch */ /* all handled in common code directly below this switch */
break; break;
default: case VIR_DOMAIN_NET_TYPE_VHOSTUSER:
case VIR_DOMAIN_NET_TYPE_HOSTDEV:
virReportError(VIR_ERR_OPERATION_UNSUPPORTED, virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
_("unable to change config on '%s' network type"), _("unable to change config on '%s' network type"),
virDomainNetTypeToString(newdev->type)); virDomainNetTypeToString(newdev->type));
break; goto cleanup;
case VIR_DOMAIN_NET_TYPE_LAST:
default:
virReportEnumRangeError(virDomainNetType, newdev->type);
goto cleanup;
} }
} else { } else {
/* interface type has changed. There are a few special cases /* interface type has changed. There are a few special cases
@ -3661,10 +3678,16 @@ qemuDomainChangeGraphics(virQEMUDriverPtr driver,
} }
break; break;
default: case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("unable to change config on '%s' graphics type"), type); _("unable to change config on '%s' graphics type"), type);
break; break;
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
default:
virReportEnumRangeError(virDomainGraphicsType, dev->type);
break;
} }
cleanup: cleanup:

View File

@ -1468,11 +1468,20 @@ qemuMigrationJobName(virDomainObjPtr vm)
switch (priv->job.asyncJob) { switch (priv->job.asyncJob) {
case QEMU_ASYNC_JOB_MIGRATION_OUT: case QEMU_ASYNC_JOB_MIGRATION_OUT:
return _("migration job"); return _("migration out job");
case QEMU_ASYNC_JOB_SAVE: case QEMU_ASYNC_JOB_SAVE:
return _("domain save job"); return _("domain save job");
case QEMU_ASYNC_JOB_DUMP: case QEMU_ASYNC_JOB_DUMP:
return _("domain core dump job"); return _("domain core dump job");
case QEMU_ASYNC_JOB_NONE:
return _("undefined");
case QEMU_ASYNC_JOB_MIGRATION_IN:
return _("migration in job");
case QEMU_ASYNC_JOB_SNAPSHOT:
return _("snapshot job");
case QEMU_ASYNC_JOB_START:
return _("start job");
case QEMU_ASYNC_JOB_LAST:
default: default:
return _("job"); return _("job");
} }

View File

@ -679,6 +679,8 @@ qemuProcessHandleShutdown(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
detail = VIR_DOMAIN_EVENT_SHUTDOWN_HOST; detail = VIR_DOMAIN_EVENT_SHUTDOWN_HOST;
break; break;
case VIR_TRISTATE_BOOL_ABSENT:
case VIR_TRISTATE_BOOL_LAST:
default: default:
detail = VIR_DOMAIN_EVENT_SHUTDOWN_FINISHED; detail = VIR_DOMAIN_EVENT_SHUTDOWN_FINISHED;
break; break;