1// 2// Copyright (C) 2013 The Android Open Source Project 3// 4// Licensed under the Apache License, Version 2.0 (the "License"); 5// you may not use this file except in compliance with the License. 6// You may obtain a copy of the License at 7// 8// http://www.apache.org/licenses/LICENSE-2.0 9// 10// Unless required by applicable law or agreed to in writing, software 11// distributed under the License is distributed on an "AS IS" BASIS, 12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13// See the License for the specific language governing permissions and 14// limitations under the License. 15// 16 17#ifndef UPDATE_ENGINE_COMMON_CONSTANTS_H_ 18#define UPDATE_ENGINE_COMMON_CONSTANTS_H_ 19 20namespace chromeos_update_engine { 21 22// Directory for AU prefs that are preserved across powerwash. 23extern const char kPowerwashSafePrefsSubDirectory[]; 24 25// The location where we store the AU preferences (state etc). 26extern const char kPrefsSubDirectory[]; 27 28// Path to the post install command, relative to the partition. 29extern const char kPostinstallDefaultScript[]; 30 31// Path to the stateful partition on the root filesystem. 32extern const char kStatefulPartition[]; 33 34// Constants related to preferences. 35extern const char kPrefsAttemptInProgress[]; 36extern const char kPrefsBackoffExpiryTime[]; 37extern const char kPrefsBootId[]; 38extern const char kPrefsCurrentBytesDownloaded[]; 39extern const char kPrefsCurrentResponseSignature[]; 40extern const char kPrefsCurrentUrlFailureCount[]; 41extern const char kPrefsCurrentUrlIndex[]; 42extern const char kPrefsDailyMetricsLastReportedAt[]; 43extern const char kPrefsDeltaUpdateFailures[]; 44extern const char kPrefsFullPayloadAttemptNumber[]; 45extern const char kPrefsInstallDateDays[]; 46extern const char kPrefsLastActivePingDay[]; 47extern const char kPrefsLastRollCallPingDay[]; 48extern const char kPrefsManifestMetadataSize[]; 49extern const char kPrefsManifestSignatureSize[]; 50extern const char kPrefsMetricsAttemptLastReportingTime[]; 51extern const char kPrefsMetricsCheckLastReportingTime[]; 52extern const char kPrefsNumReboots[]; 53extern const char kPrefsNumResponsesSeen[]; 54extern const char kPrefsOmahaCohort[]; 55extern const char kPrefsOmahaCohortHint[]; 56extern const char kPrefsOmahaCohortName[]; 57extern const char kPrefsOmahaEolStatus[]; 58extern const char kPrefsP2PEnabled[]; 59extern const char kPrefsP2PFirstAttemptTimestamp[]; 60extern const char kPrefsP2PNumAttempts[]; 61extern const char kPrefsPayloadAttemptNumber[]; 62extern const char kPrefsPostInstallSucceeded[]; 63extern const char kPrefsPreviousVersion[]; 64extern const char kPrefsResumedUpdateFailures[]; 65extern const char kPrefsRollbackVersion[]; 66extern const char kPrefsChannelOnSlotPrefix[]; 67extern const char kPrefsSystemUpdatedMarker[]; 68extern const char kPrefsTargetVersionAttempt[]; 69extern const char kPrefsTargetVersionInstalledFrom[]; 70extern const char kPrefsTargetVersionUniqueId[]; 71extern const char kPrefsTotalBytesDownloaded[]; 72extern const char kPrefsUpdateCheckCount[]; 73extern const char kPrefsUpdateCheckResponseHash[]; 74extern const char kPrefsUpdateCompletedBootTime[]; 75extern const char kPrefsUpdateCompletedOnBootId[]; 76extern const char kPrefsUpdateDurationUptime[]; 77extern const char kPrefsUpdateFirstSeenAt[]; 78extern const char kPrefsUpdateOverCellularPermission[]; 79extern const char kPrefsUpdateServerCertificate[]; 80extern const char kPrefsUpdateStateNextDataLength[]; 81extern const char kPrefsUpdateStateNextDataOffset[]; 82extern const char kPrefsUpdateStateNextOperation[]; 83extern const char kPrefsUpdateStatePayloadIndex[]; 84extern const char kPrefsUpdateStateSHA256Context[]; 85extern const char kPrefsUpdateStateSignatureBlob[]; 86extern const char kPrefsUpdateStateSignedSHA256Context[]; 87extern const char kPrefsUpdateTimestampStart[]; 88extern const char kPrefsUrlSwitchCount[]; 89extern const char kPrefsWallClockWaitPeriod[]; 90 91// Keys used when storing and loading payload properties. 92extern const char kPayloadPropertyFileSize[]; 93extern const char kPayloadPropertyFileHash[]; 94extern const char kPayloadPropertyMetadataSize[]; 95extern const char kPayloadPropertyMetadataHash[]; 96extern const char kPayloadPropertyAuthorization[]; 97extern const char kPayloadPropertyUserAgent[]; 98extern const char kPayloadPropertyPowerwash[]; 99extern const char kPayloadPropertyNetworkId[]; 100extern const char kPayloadPropertySwitchSlotOnReboot[]; 101extern const char kPayloadPropertyRunPostInstall[]; 102 103// A download source is any combination of protocol and server (that's of 104// interest to us when looking at UMA metrics) using which we may download 105// the payload. 106typedef enum { 107 kDownloadSourceHttpsServer, // UMA Binary representation: 0001 108 kDownloadSourceHttpServer, // UMA Binary representation: 0010 109 kDownloadSourceHttpPeer, // UMA Binary representation: 0100 110 111 // Note: Add new sources only above this line. 112 kNumDownloadSources 113} DownloadSource; 114 115// A payload can be a Full or Delta payload. In some cases, a Full payload is 116// used even when a Delta payload was available for the update, called here 117// ForcedFull. The PayloadType enum is only used to send UMA metrics about the 118// successfully applied payload. 119typedef enum { 120 kPayloadTypeFull, 121 kPayloadTypeDelta, 122 kPayloadTypeForcedFull, 123 124 // Note: Add new payload types only above this line. 125 kNumPayloadTypes 126} PayloadType; 127 128// Maximum number of times we'll allow using p2p for the same update payload. 129const int kMaxP2PAttempts = 10; 130 131// Maximum wallclock time we allow attempting to update using p2p for 132// the same update payload - five days. 133const int kMaxP2PAttemptTimeSeconds = 5 * 24 * 60 * 60; 134 135// The maximum amount of time to spend waiting for p2p-client(1) to 136// return while waiting in line to use the LAN - six hours. 137const int kMaxP2PNetworkWaitTimeSeconds = 6 * 60 * 60; 138 139// The maximum number of payload files to keep in /var/cache/p2p. 140const int kMaxP2PFilesToKeep = 3; 141 142// The maximum number of days to keep a p2p file; 143const int kMaxP2PFileAgeDays = 5; 144 145// The default number of UMA buckets for metrics. 146const int kNumDefaultUmaBuckets = 50; 147 148// General constants 149const int kNumBytesInOneMiB = 1024 * 1024; 150 151// Number of redirects allowed when downloading. 152const int kDownloadMaxRedirects = 10; 153 154// The minimum average speed that downloads must sustain... 155// 156// This is set low because some devices may have very poor 157// connectivity and we want to make as much forward progress as 158// possible. For p2p this is high (25 kB/second) since we can assume 159// high bandwidth (same LAN) and we want to fail fast. 160const int kDownloadLowSpeedLimitBps = 1; 161const int kDownloadP2PLowSpeedLimitBps = 25 * 1000; 162 163// ... measured over this period. 164// 165// For non-official builds (e.g. typically built on a developer's 166// workstation and served via devserver) bump this since it takes time 167// for the workstation to generate the payload. For p2p, make this 168// relatively low since we want to fail fast. 169const int kDownloadLowSpeedTimeSeconds = 90; 170const int kDownloadDevModeLowSpeedTimeSeconds = 180; 171const int kDownloadP2PLowSpeedTimeSeconds = 60; 172 173// The maximum amount of HTTP server reconnect attempts. 174// 175// This is set high in order to maximize the attempt's chance of 176// succeeding. When using p2p, this is low in order to fail fast. 177const int kDownloadMaxRetryCount = 20; 178const int kDownloadMaxRetryCountOobeNotComplete = 3; 179const int kDownloadMaxRetryCountInteractive = 3; 180const int kDownloadP2PMaxRetryCount = 5; 181 182// The connect timeout, in seconds. 183// 184// This is set high because some devices may have very poor 185// connectivity and we may be using HTTPS which involves complicated 186// multi-roundtrip setup. For p2p, this is set low because we can 187// the server is on the same LAN and we want to fail fast. 188const int kDownloadConnectTimeoutSeconds = 30; 189const int kDownloadP2PConnectTimeoutSeconds = 5; 190 191} // namespace chromeos_update_engine 192 193#endif // UPDATE_ENGINE_COMMON_CONSTANTS_H_ 194