1 /* 2 * QError Module 3 * 4 * Copyright (C) 2009 Red Hat Inc. 5 * 6 * Authors: 7 * Luiz Capitulino <lcapitulino@redhat.com> 8 * 9 * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. 10 * See the COPYING.LIB file in the top-level directory. 11 */ 12 #ifndef QERROR_H 13 #define QERROR_H 14 15 #include "qapi/qmp/qstring.h" 16 #include "qemu/error-report.h" 17 #include "qapi/error.h" 18 #include "qapi-types.h" 19 #include <stdarg.h> 20 21 typedef struct QError { 22 QObject_HEAD; 23 Location loc; 24 char *err_msg; 25 ErrorClass err_class; 26 } QError; 27 28 QString *qerror_human(const QError *qerror); 29 void qerror_report(ErrorClass err_class, const char *fmt, ...) GCC_FMT_ATTR(2, 3); 30 void qerror_report_err(Error *err); 31 32 /* 33 * QError class list 34 * Please keep the definitions in alphabetical order. 35 * Use scripts/check-qerror.sh to check. 36 */ 37 #define QERR_BASE_NOT_FOUND \ 38 ERROR_CLASS_GENERIC_ERROR, "Base '%s' not found" 39 40 #define QERR_BLOCK_JOB_NOT_ACTIVE \ 41 ERROR_CLASS_DEVICE_NOT_ACTIVE, "No active block job on device '%s'" 42 43 #define QERR_BLOCK_JOB_NOT_READY \ 44 ERROR_CLASS_GENERIC_ERROR, "The active block job for device '%s' cannot be completed" 45 46 #define QERR_BLOCK_FORMAT_FEATURE_NOT_SUPPORTED \ 47 ERROR_CLASS_GENERIC_ERROR, "Block format '%s' used by device '%s' does not support feature '%s'" 48 49 #define QERR_BUS_NO_HOTPLUG \ 50 ERROR_CLASS_GENERIC_ERROR, "Bus '%s' does not support hotplugging" 51 52 #define QERR_BUS_NOT_FOUND \ 53 ERROR_CLASS_GENERIC_ERROR, "Bus '%s' not found" 54 55 #define QERR_COMMAND_NOT_FOUND \ 56 ERROR_CLASS_COMMAND_NOT_FOUND, "The command %s has not been found" 57 58 #define QERR_DEVICE_ENCRYPTED \ 59 ERROR_CLASS_DEVICE_ENCRYPTED, "'%s' (%s) is encrypted" 60 61 #define QERR_DEVICE_HAS_NO_MEDIUM \ 62 ERROR_CLASS_GENERIC_ERROR, "Device '%s' has no medium" 63 64 #define QERR_DEVICE_INIT_FAILED \ 65 ERROR_CLASS_GENERIC_ERROR, "Device '%s' could not be initialized" 66 67 #define QERR_DEVICE_IN_USE \ 68 ERROR_CLASS_GENERIC_ERROR, "Device '%s' is in use" 69 70 #define QERR_DEVICE_IS_READ_ONLY \ 71 ERROR_CLASS_GENERIC_ERROR, "Device '%s' is read only" 72 73 #define QERR_DEVICE_NO_HOTPLUG \ 74 ERROR_CLASS_GENERIC_ERROR, "Device '%s' does not support hotplugging" 75 76 #define QERR_DEVICE_NOT_ACTIVE \ 77 ERROR_CLASS_DEVICE_NOT_ACTIVE, "No %s device has been activated" 78 79 #define QERR_DEVICE_NOT_ENCRYPTED \ 80 ERROR_CLASS_GENERIC_ERROR, "Device '%s' is not encrypted" 81 82 #define QERR_DEVICE_NOT_FOUND \ 83 ERROR_CLASS_DEVICE_NOT_FOUND, "Device '%s' not found" 84 85 #define QERR_FD_NOT_FOUND \ 86 ERROR_CLASS_GENERIC_ERROR, "File descriptor named '%s' not found" 87 88 #define QERR_FD_NOT_SUPPLIED \ 89 ERROR_CLASS_GENERIC_ERROR, "No file descriptor supplied via SCM_RIGHTS" 90 91 #define QERR_FEATURE_DISABLED \ 92 ERROR_CLASS_GENERIC_ERROR, "The feature '%s' is not enabled" 93 94 #define QERR_INVALID_BLOCK_FORMAT \ 95 ERROR_CLASS_GENERIC_ERROR, "Invalid block format '%s'" 96 97 #define QERR_INVALID_PARAMETER \ 98 ERROR_CLASS_GENERIC_ERROR, "Invalid parameter '%s'" 99 100 #define QERR_INVALID_PARAMETER_TYPE \ 101 ERROR_CLASS_GENERIC_ERROR, "Invalid parameter type for '%s', expected: %s" 102 103 #define QERR_INVALID_PARAMETER_VALUE \ 104 ERROR_CLASS_GENERIC_ERROR, "Parameter '%s' expects %s" 105 106 #define QERR_INVALID_PASSWORD \ 107 ERROR_CLASS_GENERIC_ERROR, "Password incorrect" 108 109 #define QERR_IO_ERROR \ 110 ERROR_CLASS_GENERIC_ERROR, "An IO error has occurred" 111 112 #define QERR_JSON_PARSING \ 113 ERROR_CLASS_GENERIC_ERROR, "Invalid JSON syntax" 114 115 #define QERR_KVM_MISSING_CAP \ 116 ERROR_CLASS_KVM_MISSING_CAP, "Using KVM without %s, %s unavailable" 117 118 #define QERR_MIGRATION_ACTIVE \ 119 ERROR_CLASS_GENERIC_ERROR, "There's a migration process in progress" 120 121 #define QERR_MISSING_PARAMETER \ 122 ERROR_CLASS_GENERIC_ERROR, "Parameter '%s' is missing" 123 124 #define QERR_PERMISSION_DENIED \ 125 ERROR_CLASS_GENERIC_ERROR, "Insufficient permission to perform this operation" 126 127 #define QERR_PROPERTY_VALUE_BAD \ 128 ERROR_CLASS_GENERIC_ERROR, "Property '%s.%s' doesn't take value '%s'" 129 130 #define QERR_PROPERTY_VALUE_OUT_OF_RANGE \ 131 ERROR_CLASS_GENERIC_ERROR, "Property %s.%s doesn't take value %" PRId64 " (minimum: %" PRId64 ", maximum: %" PRId64 ")" 132 133 #define QERR_QGA_COMMAND_FAILED \ 134 ERROR_CLASS_GENERIC_ERROR, "Guest agent command failed, error was '%s'" 135 136 #define QERR_QMP_BAD_INPUT_OBJECT \ 137 ERROR_CLASS_GENERIC_ERROR, "Expected '%s' in QMP input" 138 139 #define QERR_QMP_BAD_INPUT_OBJECT_MEMBER \ 140 ERROR_CLASS_GENERIC_ERROR, "QMP input object member '%s' expects '%s'" 141 142 #define QERR_QMP_EXTRA_MEMBER \ 143 ERROR_CLASS_GENERIC_ERROR, "QMP input object member '%s' is unexpected" 144 145 #define QERR_SET_PASSWD_FAILED \ 146 ERROR_CLASS_GENERIC_ERROR, "Could not set password" 147 148 #define QERR_UNDEFINED_ERROR \ 149 ERROR_CLASS_GENERIC_ERROR, "An undefined error has occurred" 150 151 #define QERR_UNKNOWN_BLOCK_FORMAT_FEATURE \ 152 ERROR_CLASS_GENERIC_ERROR, "'%s' uses a %s feature which is not supported by this qemu version: %s" 153 154 #define QERR_UNSUPPORTED \ 155 ERROR_CLASS_GENERIC_ERROR, "this feature or command is not currently supported" 156 157 #endif /* QERROR_H */ 158