// Copyright (c) 2013 The Chromium OS Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_ERROR_CODE_H_ #define CHROMEOS_PLATFORM_UPDATE_ENGINE_ERROR_CODE_H_ namespace chromeos_update_engine { // Action exit codes. enum ErrorCode { kErrorCodeSuccess = 0, kErrorCodeError = 1, kErrorCodeOmahaRequestError = 2, kErrorCodeOmahaResponseHandlerError = 3, kErrorCodeFilesystemCopierError = 4, kErrorCodePostinstallRunnerError = 5, kErrorCodePayloadMismatchedType = 6, kErrorCodeInstallDeviceOpenError = 7, kErrorCodeKernelDeviceOpenError = 8, kErrorCodeDownloadTransferError = 9, kErrorCodePayloadHashMismatchError = 10, kErrorCodePayloadSizeMismatchError = 11, kErrorCodeDownloadPayloadVerificationError = 12, kErrorCodeDownloadNewPartitionInfoError = 13, kErrorCodeDownloadWriteError = 14, kErrorCodeNewRootfsVerificationError = 15, kErrorCodeNewKernelVerificationError = 16, kErrorCodeSignedDeltaPayloadExpectedError = 17, kErrorCodeDownloadPayloadPubKeyVerificationError = 18, kErrorCodePostinstallBootedFromFirmwareB = 19, kErrorCodeDownloadStateInitializationError = 20, kErrorCodeDownloadInvalidMetadataMagicString = 21, kErrorCodeDownloadSignatureMissingInManifest = 22, kErrorCodeDownloadManifestParseError = 23, kErrorCodeDownloadMetadataSignatureError = 24, kErrorCodeDownloadMetadataSignatureVerificationError = 25, kErrorCodeDownloadMetadataSignatureMismatch = 26, kErrorCodeDownloadOperationHashVerificationError = 27, kErrorCodeDownloadOperationExecutionError = 28, kErrorCodeDownloadOperationHashMismatch = 29, kErrorCodeOmahaRequestEmptyResponseError = 30, kErrorCodeOmahaRequestXMLParseError = 31, kErrorCodeDownloadInvalidMetadataSize = 32, kErrorCodeDownloadInvalidMetadataSignature = 33, kErrorCodeOmahaResponseInvalid = 34, kErrorCodeOmahaUpdateIgnoredPerPolicy = 35, kErrorCodeOmahaUpdateDeferredPerPolicy = 36, kErrorCodeOmahaErrorInHTTPResponse = 37, kErrorCodeDownloadOperationHashMissingError = 38, kErrorCodeDownloadMetadataSignatureMissingError = 39, kErrorCodeOmahaUpdateDeferredForBackoff = 40, kErrorCodePostinstallPowerwashError = 41, kErrorCodeUpdateCanceledByChannelChange = 42, kErrorCodePostinstallFirmwareRONotUpdatable = 43, kErrorCodeUnsupportedMajorPayloadVersion = 44, kErrorCodeUnsupportedMinorPayloadVersion = 45, // VERY IMPORTANT! When adding new error codes: // // 1) Update tools/metrics/histograms/histograms.xml in Chrome. // // 2) Update the assorted switch statements in update_engine which won't // build until this case is added. // Any code above this is sent to both Omaha and UMA as-is, except // kErrorCodeOmahaErrorInHTTPResponse (see error code 2000 for more details). // Codes/flags below this line is sent only to Omaha and not to UMA. // kErrorCodeUmaReportedMax is not an error code per se, it's just the count // of the number of enums above. Add any new errors above this line if you // want them to show up on UMA. Stuff below this line will not be sent to UMA // but is used for other errors that are sent to Omaha. We don't assign any // particular value for this enum so that it's just one more than the last // one above and thus always represents the correct count of UMA metrics // buckets, even when new enums are added above this line in future. See // utils::SendErrorCodeToUma on how this enum is used. kErrorCodeUmaReportedMax, // use the 2xxx range to encode HTTP errors. These errors are available in // Dremel with the individual granularity. But for UMA purposes, all these // errors are aggregated into one: kErrorCodeOmahaErrorInHTTPResponse. kErrorCodeOmahaRequestHTTPResponseBase = 2000, // + HTTP response code // TODO(jaysri): Move out all the bit masks into separate constants // outside the enum as part of fixing bug 34369. // Bit flags. Remember to update the mask below for new bits. // Set if boot mode not normal. kErrorCodeDevModeFlag = 1 << 31, // Set if resuming an interruped update. kErrorCodeResumedFlag = 1 << 30, // Set if using a dev/test image as opposed to an MP-signed image. kErrorCodeTestImageFlag = 1 << 29, // Set if using devserver or Omaha sandbox (using crosh autest). kErrorCodeTestOmahaUrlFlag = 1 << 28, // Mask that indicates bit positions that are used to indicate special flags // that are embedded in the error code to provide additional context about // the system in which the error was encountered. kErrorCodeSpecialFlags = (kErrorCodeDevModeFlag | kErrorCodeResumedFlag | kErrorCodeTestImageFlag | kErrorCodeTestOmahaUrlFlag) }; } // namespace chromeos_update_engine #endif // CHROMEOS_PLATFORM_UPDATE_ENGINE_ERROR_CODE_H_