xref: /aosp_15_r20/system/update_engine/common/error_code.h (revision 5a9231315b4521097b8dc3750bc806fcafe0c72f)
1*5a923131SAndroid Build Coastguard Worker //
2*5a923131SAndroid Build Coastguard Worker // Copyright (C) 2013 The Android Open Source Project
3*5a923131SAndroid Build Coastguard Worker //
4*5a923131SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
5*5a923131SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
6*5a923131SAndroid Build Coastguard Worker // You may obtain a copy of the License at
7*5a923131SAndroid Build Coastguard Worker //
8*5a923131SAndroid Build Coastguard Worker //      http://www.apache.org/licenses/LICENSE-2.0
9*5a923131SAndroid Build Coastguard Worker //
10*5a923131SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
11*5a923131SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
12*5a923131SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*5a923131SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
14*5a923131SAndroid Build Coastguard Worker // limitations under the License.
15*5a923131SAndroid Build Coastguard Worker //
16*5a923131SAndroid Build Coastguard Worker 
17*5a923131SAndroid Build Coastguard Worker #ifndef UPDATE_ENGINE_COMMON_ERROR_CODE_H_
18*5a923131SAndroid Build Coastguard Worker #define UPDATE_ENGINE_COMMON_ERROR_CODE_H_
19*5a923131SAndroid Build Coastguard Worker 
20*5a923131SAndroid Build Coastguard Worker #include <ostream>  // NOLINT(readability/streams)
21*5a923131SAndroid Build Coastguard Worker 
22*5a923131SAndroid Build Coastguard Worker namespace chromeos_update_engine {
23*5a923131SAndroid Build Coastguard Worker 
24*5a923131SAndroid Build Coastguard Worker // Action exit codes.
25*5a923131SAndroid Build Coastguard Worker enum class ErrorCode : int {
26*5a923131SAndroid Build Coastguard Worker   kSuccess = 0,
27*5a923131SAndroid Build Coastguard Worker   kError = 1,
28*5a923131SAndroid Build Coastguard Worker   kOmahaRequestError = 2,
29*5a923131SAndroid Build Coastguard Worker   kOmahaResponseHandlerError = 3,
30*5a923131SAndroid Build Coastguard Worker   kFilesystemCopierError = 4,
31*5a923131SAndroid Build Coastguard Worker   kPostinstallRunnerError = 5,
32*5a923131SAndroid Build Coastguard Worker   kPayloadMismatchedType = 6,
33*5a923131SAndroid Build Coastguard Worker   kInstallDeviceOpenError = 7,
34*5a923131SAndroid Build Coastguard Worker   kKernelDeviceOpenError = 8,
35*5a923131SAndroid Build Coastguard Worker   kDownloadTransferError = 9,
36*5a923131SAndroid Build Coastguard Worker   kPayloadHashMismatchError = 10,
37*5a923131SAndroid Build Coastguard Worker   kPayloadSizeMismatchError = 11,
38*5a923131SAndroid Build Coastguard Worker   kDownloadPayloadVerificationError = 12,
39*5a923131SAndroid Build Coastguard Worker   kDownloadNewPartitionInfoError = 13,
40*5a923131SAndroid Build Coastguard Worker   kDownloadWriteError = 14,
41*5a923131SAndroid Build Coastguard Worker   kNewRootfsVerificationError = 15,
42*5a923131SAndroid Build Coastguard Worker   kNewKernelVerificationError = 16,
43*5a923131SAndroid Build Coastguard Worker   kSignedDeltaPayloadExpectedError = 17,
44*5a923131SAndroid Build Coastguard Worker   kDownloadPayloadPubKeyVerificationError = 18,
45*5a923131SAndroid Build Coastguard Worker   kPostinstallBootedFromFirmwareB = 19,
46*5a923131SAndroid Build Coastguard Worker   kDownloadStateInitializationError = 20,
47*5a923131SAndroid Build Coastguard Worker   kDownloadInvalidMetadataMagicString = 21,
48*5a923131SAndroid Build Coastguard Worker   kDownloadSignatureMissingInManifest = 22,
49*5a923131SAndroid Build Coastguard Worker   kDownloadManifestParseError = 23,
50*5a923131SAndroid Build Coastguard Worker   kDownloadMetadataSignatureError = 24,
51*5a923131SAndroid Build Coastguard Worker   kDownloadMetadataSignatureVerificationError = 25,
52*5a923131SAndroid Build Coastguard Worker   kDownloadMetadataSignatureMismatch = 26,
53*5a923131SAndroid Build Coastguard Worker   kDownloadOperationHashVerificationError = 27,
54*5a923131SAndroid Build Coastguard Worker   kDownloadOperationExecutionError = 28,
55*5a923131SAndroid Build Coastguard Worker   kDownloadOperationHashMismatch = 29,
56*5a923131SAndroid Build Coastguard Worker   kOmahaRequestEmptyResponseError = 30,
57*5a923131SAndroid Build Coastguard Worker   kOmahaRequestXMLParseError = 31,
58*5a923131SAndroid Build Coastguard Worker   kDownloadInvalidMetadataSize = 32,
59*5a923131SAndroid Build Coastguard Worker   kDownloadInvalidMetadataSignature = 33,
60*5a923131SAndroid Build Coastguard Worker   kOmahaResponseInvalid = 34,
61*5a923131SAndroid Build Coastguard Worker   kOmahaUpdateIgnoredPerPolicy = 35,
62*5a923131SAndroid Build Coastguard Worker   kOmahaUpdateDeferredPerPolicy = 36,
63*5a923131SAndroid Build Coastguard Worker   kOmahaErrorInHTTPResponse = 37,
64*5a923131SAndroid Build Coastguard Worker   kDownloadOperationHashMissingError = 38,
65*5a923131SAndroid Build Coastguard Worker   kDownloadMetadataSignatureMissingError = 39,
66*5a923131SAndroid Build Coastguard Worker   kOmahaUpdateDeferredForBackoff = 40,
67*5a923131SAndroid Build Coastguard Worker   kPostinstallPowerwashError = 41,
68*5a923131SAndroid Build Coastguard Worker   kUpdateCanceledByChannelChange = 42,
69*5a923131SAndroid Build Coastguard Worker   kPostinstallFirmwareRONotUpdatable = 43,
70*5a923131SAndroid Build Coastguard Worker   kUnsupportedMajorPayloadVersion = 44,
71*5a923131SAndroid Build Coastguard Worker   kUnsupportedMinorPayloadVersion = 45,
72*5a923131SAndroid Build Coastguard Worker   kOmahaRequestXMLHasEntityDecl = 46,
73*5a923131SAndroid Build Coastguard Worker   kFilesystemVerifierError = 47,
74*5a923131SAndroid Build Coastguard Worker   kUserCanceled = 48,
75*5a923131SAndroid Build Coastguard Worker   kNonCriticalUpdateInOOBE = 49,
76*5a923131SAndroid Build Coastguard Worker   kOmahaUpdateIgnoredOverCellular = 50,
77*5a923131SAndroid Build Coastguard Worker   kPayloadTimestampError = 51,
78*5a923131SAndroid Build Coastguard Worker   kUpdatedButNotActive = 52,
79*5a923131SAndroid Build Coastguard Worker   kNoUpdate = 53,
80*5a923131SAndroid Build Coastguard Worker   kRollbackNotPossible = 54,
81*5a923131SAndroid Build Coastguard Worker   kFirstActiveOmahaPingSentPersistenceError = 55,
82*5a923131SAndroid Build Coastguard Worker   kVerityCalculationError = 56,
83*5a923131SAndroid Build Coastguard Worker   kInternalLibCurlError = 57,
84*5a923131SAndroid Build Coastguard Worker   kUnresolvedHostError = 58,
85*5a923131SAndroid Build Coastguard Worker   kUnresolvedHostRecovered = 59,
86*5a923131SAndroid Build Coastguard Worker   kNotEnoughSpace = 60,
87*5a923131SAndroid Build Coastguard Worker   kDeviceCorrupted = 61,
88*5a923131SAndroid Build Coastguard Worker   kPackageExcludedFromUpdate = 62,
89*5a923131SAndroid Build Coastguard Worker   kPostInstallMountError = 63,
90*5a923131SAndroid Build Coastguard Worker   kOverlayfsenabledError = 64,
91*5a923131SAndroid Build Coastguard Worker   kUpdateProcessing = 65,
92*5a923131SAndroid Build Coastguard Worker   kUpdateAlreadyInstalled = 66,
93*5a923131SAndroid Build Coastguard Worker 
94*5a923131SAndroid Build Coastguard Worker   // VERY IMPORTANT! When adding new error codes:
95*5a923131SAndroid Build Coastguard Worker   //
96*5a923131SAndroid Build Coastguard Worker   // 1) Update tools/metrics/histograms/enums.xml in Chrome.
97*5a923131SAndroid Build Coastguard Worker   //
98*5a923131SAndroid Build Coastguard Worker   // 2) Update the assorted switch statements in update_engine which won't
99*5a923131SAndroid Build Coastguard Worker   //    build until this case is added.
100*5a923131SAndroid Build Coastguard Worker 
101*5a923131SAndroid Build Coastguard Worker   // Any code above this is sent to both Omaha and UMA as-is, except
102*5a923131SAndroid Build Coastguard Worker   // kOmahaErrorInHTTPResponse (see error code 2000 for more details).
103*5a923131SAndroid Build Coastguard Worker   // Codes/flags below this line is sent only to Omaha and not to UMA.
104*5a923131SAndroid Build Coastguard Worker 
105*5a923131SAndroid Build Coastguard Worker   // kUmaReportedMax is not an error code per se, it's just the count
106*5a923131SAndroid Build Coastguard Worker   // of the number of enums above.  Add any new errors above this line if you
107*5a923131SAndroid Build Coastguard Worker   // want them to show up on UMA. Stuff below this line will not be sent to UMA
108*5a923131SAndroid Build Coastguard Worker   // but is used for other errors that are sent to Omaha. We don't assign any
109*5a923131SAndroid Build Coastguard Worker   // particular value for this enum so that it's just one more than the last
110*5a923131SAndroid Build Coastguard Worker   // one above and thus always represents the correct count of UMA metrics
111*5a923131SAndroid Build Coastguard Worker   // buckets, even when new enums are added above this line in future. See
112*5a923131SAndroid Build Coastguard Worker   // metrics::ReportUpdateAttemptMetrics() on how this enum is used.
113*5a923131SAndroid Build Coastguard Worker   kUmaReportedMax,
114*5a923131SAndroid Build Coastguard Worker 
115*5a923131SAndroid Build Coastguard Worker   // use the 2xxx range to encode HTTP errors. These errors are available in
116*5a923131SAndroid Build Coastguard Worker   // Dremel with the individual granularity. But for UMA purposes, all these
117*5a923131SAndroid Build Coastguard Worker   // errors are aggregated into one: kOmahaErrorInHTTPResponse.
118*5a923131SAndroid Build Coastguard Worker   kOmahaRequestHTTPResponseBase = 2000,  // + HTTP response code
119*5a923131SAndroid Build Coastguard Worker 
120*5a923131SAndroid Build Coastguard Worker   // TODO(jaysri): Move out all the bit masks into separate constants
121*5a923131SAndroid Build Coastguard Worker   // outside the enum as part of fixing bug 34369.
122*5a923131SAndroid Build Coastguard Worker   // Bit flags. Remember to update the mask below for new bits.
123*5a923131SAndroid Build Coastguard Worker 
124*5a923131SAndroid Build Coastguard Worker   // Set if boot mode not normal.
125*5a923131SAndroid Build Coastguard Worker   // TODO(garnold) This is very debatable value to use, knowing that the
126*5a923131SAndroid Build Coastguard Worker   // underlying type is a signed int (often, 32-bit). However, at this point
127*5a923131SAndroid Build Coastguard Worker   // there are parts of the ecosystem that expect this to be a negative value,
128*5a923131SAndroid Build Coastguard Worker   // so we preserve this semantics. This should be reconsidered if/when we
129*5a923131SAndroid Build Coastguard Worker   // modify the implementation of ErrorCode into a properly encapsulated class.
130*5a923131SAndroid Build Coastguard Worker   kDevModeFlag = 1 << 31,
131*5a923131SAndroid Build Coastguard Worker 
132*5a923131SAndroid Build Coastguard Worker   // Set if resuming an interrupted update.
133*5a923131SAndroid Build Coastguard Worker   kResumedFlag = 1 << 30,
134*5a923131SAndroid Build Coastguard Worker 
135*5a923131SAndroid Build Coastguard Worker   // Set if using a dev/test image as opposed to an MP-signed image.
136*5a923131SAndroid Build Coastguard Worker   kTestImageFlag = 1 << 29,
137*5a923131SAndroid Build Coastguard Worker 
138*5a923131SAndroid Build Coastguard Worker   // Set if using devserver or Omaha sandbox (using crosh autest).
139*5a923131SAndroid Build Coastguard Worker   kTestOmahaUrlFlag = 1 << 28,
140*5a923131SAndroid Build Coastguard Worker 
141*5a923131SAndroid Build Coastguard Worker   // Mask that indicates bit positions that are used to indicate special flags
142*5a923131SAndroid Build Coastguard Worker   // that are embedded in the error code to provide additional context about
143*5a923131SAndroid Build Coastguard Worker   // the system in which the error was encountered.
144*5a923131SAndroid Build Coastguard Worker   kSpecialFlags =
145*5a923131SAndroid Build Coastguard Worker       (kDevModeFlag | kResumedFlag | kTestImageFlag | kTestOmahaUrlFlag)
146*5a923131SAndroid Build Coastguard Worker };
147*5a923131SAndroid Build Coastguard Worker 
148*5a923131SAndroid Build Coastguard Worker inline std::ostream& operator<<(std::ostream& os, ErrorCode val) {
149*5a923131SAndroid Build Coastguard Worker   return os << static_cast<int>(val);
150*5a923131SAndroid Build Coastguard Worker }
151*5a923131SAndroid Build Coastguard Worker 
152*5a923131SAndroid Build Coastguard Worker }  // namespace chromeos_update_engine
153*5a923131SAndroid Build Coastguard Worker 
154*5a923131SAndroid Build Coastguard Worker #endif  // UPDATE_ENGINE_COMMON_ERROR_CODE_H_
155