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/qdict.h" 16 #include "qapi/qmp/qstring.h" 17 #include "qemu/error-report.h" 18 #include "qapi/error.h" 19 #include "qapi-types.h" 20 #include <stdarg.h> 21 22 typedef struct QError { 23 QObject_HEAD; 24 Location loc; 25 char *err_msg; 26 ErrorClass err_class; 27 } QError; 28 29 QString *qerror_human(const QError *qerror); 30 void qerror_report(ErrorClass err_class, const char *fmt, ...) GCC_FMT_ATTR(2, 3); 31 void qerror_report_err(Error *err); 32 33 /* 34 * QError class list 35 * Please keep the definitions in alphabetical order. 36 * Use scripts/check-qerror.sh to check. 37 */ 38 #define QERR_ADD_CLIENT_FAILED \ 39 ERROR_CLASS_GENERIC_ERROR, "Could not add client" 40 41 #define QERR_AMBIGUOUS_PATH \ 42 ERROR_CLASS_GENERIC_ERROR, "Path '%s' does not uniquely identify an object" 43 44 #define QERR_BAD_BUS_FOR_DEVICE \ 45 ERROR_CLASS_GENERIC_ERROR, "Device '%s' can't go on a %s bus" 46 47 #define QERR_BASE_NOT_FOUND \ 48 ERROR_CLASS_GENERIC_ERROR, "Base '%s' not found" 49 50 #define QERR_BLOCK_JOB_NOT_ACTIVE \ 51 ERROR_CLASS_DEVICE_NOT_ACTIVE, "No active block job on device '%s'" 52 53 #define QERR_BLOCK_JOB_PAUSED \ 54 ERROR_CLASS_GENERIC_ERROR, "The block job for device '%s' is currently paused" 55 56 #define QERR_BLOCK_JOB_NOT_READY \ 57 ERROR_CLASS_GENERIC_ERROR, "The active block job for device '%s' cannot be completed" 58 59 #define QERR_BLOCK_FORMAT_FEATURE_NOT_SUPPORTED \ 60 ERROR_CLASS_GENERIC_ERROR, "Block format '%s' used by device '%s' does not support feature '%s'" 61 62 #define QERR_BUFFER_OVERRUN \ 63 ERROR_CLASS_GENERIC_ERROR, "An internal buffer overran" 64 65 #define QERR_BUS_NO_HOTPLUG \ 66 ERROR_CLASS_GENERIC_ERROR, "Bus '%s' does not support hotplugging" 67 68 #define QERR_BUS_NOT_FOUND \ 69 ERROR_CLASS_GENERIC_ERROR, "Bus '%s' not found" 70 71 #define QERR_COMMAND_DISABLED \ 72 ERROR_CLASS_GENERIC_ERROR, "The command %s has been disabled for this instance" 73 74 #define QERR_COMMAND_NOT_FOUND \ 75 ERROR_CLASS_COMMAND_NOT_FOUND, "The command %s has not been found" 76 77 #define QERR_DEVICE_ENCRYPTED \ 78 ERROR_CLASS_DEVICE_ENCRYPTED, "'%s' (%s) is encrypted" 79 80 #define QERR_DEVICE_FEATURE_BLOCKS_MIGRATION \ 81 ERROR_CLASS_GENERIC_ERROR, "Migration is disabled when using feature '%s' in device '%s'" 82 83 #define QERR_DEVICE_HAS_NO_MEDIUM \ 84 ERROR_CLASS_GENERIC_ERROR, "Device '%s' has no medium" 85 86 #define QERR_DEVICE_INIT_FAILED \ 87 ERROR_CLASS_GENERIC_ERROR, "Device '%s' could not be initialized" 88 89 #define QERR_DEVICE_IN_USE \ 90 ERROR_CLASS_GENERIC_ERROR, "Device '%s' is in use" 91 92 #define QERR_DEVICE_IS_READ_ONLY \ 93 ERROR_CLASS_GENERIC_ERROR, "Device '%s' is read only" 94 95 #define QERR_DEVICE_LOCKED \ 96 ERROR_CLASS_GENERIC_ERROR, "Device '%s' is locked" 97 98 #define QERR_DEVICE_MULTIPLE_BUSSES \ 99 ERROR_CLASS_GENERIC_ERROR, "Device '%s' has multiple child busses" 100 101 #define QERR_DEVICE_NO_BUS \ 102 ERROR_CLASS_GENERIC_ERROR, "Device '%s' has no child bus" 103 104 #define QERR_DEVICE_NO_HOTPLUG \ 105 ERROR_CLASS_GENERIC_ERROR, "Device '%s' does not support hotplugging" 106 107 #define QERR_DEVICE_NOT_ACTIVE \ 108 ERROR_CLASS_DEVICE_NOT_ACTIVE, "No %s device has been activated" 109 110 #define QERR_DEVICE_NOT_ENCRYPTED \ 111 ERROR_CLASS_GENERIC_ERROR, "Device '%s' is not encrypted" 112 113 #define QERR_DEVICE_NOT_FOUND \ 114 ERROR_CLASS_DEVICE_NOT_FOUND, "Device '%s' not found" 115 116 #define QERR_DEVICE_NOT_REMOVABLE \ 117 ERROR_CLASS_GENERIC_ERROR, "Device '%s' is not removable" 118 119 #define QERR_DUPLICATE_ID \ 120 ERROR_CLASS_GENERIC_ERROR, "Duplicate ID '%s' for %s" 121 122 #define QERR_FD_NOT_FOUND \ 123 ERROR_CLASS_GENERIC_ERROR, "File descriptor named '%s' not found" 124 125 #define QERR_FD_NOT_SUPPLIED \ 126 ERROR_CLASS_GENERIC_ERROR, "No file descriptor supplied via SCM_RIGHTS" 127 128 #define QERR_FEATURE_DISABLED \ 129 ERROR_CLASS_GENERIC_ERROR, "The feature '%s' is not enabled" 130 131 #define QERR_INVALID_BLOCK_FORMAT \ 132 ERROR_CLASS_GENERIC_ERROR, "Invalid block format '%s'" 133 134 #define QERR_INVALID_OPTION_GROUP \ 135 ERROR_CLASS_GENERIC_ERROR, "There is no option group '%s'" 136 137 #define QERR_INVALID_PARAMETER \ 138 ERROR_CLASS_GENERIC_ERROR, "Invalid parameter '%s'" 139 140 #define QERR_INVALID_PARAMETER_COMBINATION \ 141 ERROR_CLASS_GENERIC_ERROR, "Invalid parameter combination" 142 143 #define QERR_INVALID_PARAMETER_TYPE \ 144 ERROR_CLASS_GENERIC_ERROR, "Invalid parameter type for '%s', expected: %s" 145 146 #define QERR_INVALID_PARAMETER_VALUE \ 147 ERROR_CLASS_GENERIC_ERROR, "Parameter '%s' expects %s" 148 149 #define QERR_INVALID_PASSWORD \ 150 ERROR_CLASS_GENERIC_ERROR, "Password incorrect" 151 152 #define QERR_IO_ERROR \ 153 ERROR_CLASS_GENERIC_ERROR, "An IO error has occurred" 154 155 #define QERR_JSON_PARSE_ERROR \ 156 ERROR_CLASS_GENERIC_ERROR, "JSON parse error, %s" 157 158 #define QERR_JSON_PARSING \ 159 ERROR_CLASS_GENERIC_ERROR, "Invalid JSON syntax" 160 161 #define QERR_KVM_MISSING_CAP \ 162 ERROR_CLASS_KVM_MISSING_CAP, "Using KVM without %s, %s unavailable" 163 164 #define QERR_MIGRATION_ACTIVE \ 165 ERROR_CLASS_GENERIC_ERROR, "There's a migration process in progress" 166 167 #define QERR_MIGRATION_NOT_SUPPORTED \ 168 ERROR_CLASS_GENERIC_ERROR, "State blocked by non-migratable device '%s'" 169 170 #define QERR_MISSING_PARAMETER \ 171 ERROR_CLASS_GENERIC_ERROR, "Parameter '%s' is missing" 172 173 #define QERR_NO_BUS_FOR_DEVICE \ 174 ERROR_CLASS_GENERIC_ERROR, "No '%s' bus found for device '%s'" 175 176 #define QERR_NOT_SUPPORTED \ 177 ERROR_CLASS_GENERIC_ERROR, "Not supported" 178 179 #define QERR_PERMISSION_DENIED \ 180 ERROR_CLASS_GENERIC_ERROR, "Insufficient permission to perform this operation" 181 182 #define QERR_PROPERTY_NOT_FOUND \ 183 ERROR_CLASS_GENERIC_ERROR, "Property '%s.%s' not found" 184 185 #define QERR_PROPERTY_VALUE_BAD \ 186 ERROR_CLASS_GENERIC_ERROR, "Property '%s.%s' doesn't take value '%s'" 187 188 #define QERR_PROPERTY_VALUE_IN_USE \ 189 ERROR_CLASS_GENERIC_ERROR, "Property '%s.%s' can't take value '%s', it's in use" 190 191 #define QERR_PROPERTY_VALUE_NOT_FOUND \ 192 ERROR_CLASS_GENERIC_ERROR, "Property '%s.%s' can't find value '%s'" 193 194 #define QERR_PROPERTY_VALUE_NOT_POWER_OF_2 \ 195 ERROR_CLASS_GENERIC_ERROR, "Property %s.%s doesn't take value '%" PRId64 "', it's not a power of 2" 196 197 #define QERR_PROPERTY_VALUE_OUT_OF_RANGE \ 198 ERROR_CLASS_GENERIC_ERROR, "Property %s.%s doesn't take value %" PRId64 " (minimum: %" PRId64 ", maximum: %" PRId64 ")" 199 200 #define QERR_QGA_COMMAND_FAILED \ 201 ERROR_CLASS_GENERIC_ERROR, "Guest agent command failed, error was '%s'" 202 203 #define QERR_QGA_LOGGING_FAILED \ 204 ERROR_CLASS_GENERIC_ERROR, "Guest agent failed to log non-optional log statement" 205 206 #define QERR_QMP_BAD_INPUT_OBJECT \ 207 ERROR_CLASS_GENERIC_ERROR, "Expected '%s' in QMP input" 208 209 #define QERR_QMP_BAD_INPUT_OBJECT_MEMBER \ 210 ERROR_CLASS_GENERIC_ERROR, "QMP input object member '%s' expects '%s'" 211 212 #define QERR_QMP_EXTRA_MEMBER \ 213 ERROR_CLASS_GENERIC_ERROR, "QMP input object member '%s' is unexpected" 214 215 #define QERR_RESET_REQUIRED \ 216 ERROR_CLASS_GENERIC_ERROR, "Resetting the Virtual Machine is required" 217 218 #define QERR_SET_PASSWD_FAILED \ 219 ERROR_CLASS_GENERIC_ERROR, "Could not set password" 220 221 #define QERR_TOO_MANY_FILES \ 222 ERROR_CLASS_GENERIC_ERROR, "Too many open files" 223 224 #define QERR_UNDEFINED_ERROR \ 225 ERROR_CLASS_GENERIC_ERROR, "An undefined error has occurred" 226 227 #define QERR_UNKNOWN_BLOCK_FORMAT_FEATURE \ 228 ERROR_CLASS_GENERIC_ERROR, "'%s' uses a %s feature which is not supported by this qemu version: %s" 229 230 #define QERR_UNSUPPORTED \ 231 ERROR_CLASS_GENERIC_ERROR, "this feature or command is not currently supported" 232 233 #define QERR_VIRTFS_FEATURE_BLOCKS_MIGRATION \ 234 ERROR_CLASS_GENERIC_ERROR, "Migration is disabled when VirtFS export path '%s' is mounted in the guest using mount_tag '%s'" 235 236 #define QERR_SOCKET_CONNECT_FAILED \ 237 ERROR_CLASS_GENERIC_ERROR, "Failed to connect to socket" 238 239 #define QERR_SOCKET_LISTEN_FAILED \ 240 ERROR_CLASS_GENERIC_ERROR, "Failed to set socket to listening mode" 241 242 #define QERR_SOCKET_BIND_FAILED \ 243 ERROR_CLASS_GENERIC_ERROR, "Failed to bind socket" 244 245 #define QERR_SOCKET_CREATE_FAILED \ 246 ERROR_CLASS_GENERIC_ERROR, "Failed to create socket" 247 248 #endif /* QERROR_H */ 249