1aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//
2aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Copyright (C) 2013 The Android Open Source Project
3aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//
4aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Licensed under the Apache License, Version 2.0 (the "License");
5aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// you may not use this file except in compliance with the License.
6aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// You may obtain a copy of the License at
7aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//
8aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//      http://www.apache.org/licenses/LICENSE-2.0
9aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//
10aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Unless required by applicable law or agreed to in writing, software
11aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// distributed under the License is distributed on an "AS IS" BASIS,
12aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// See the License for the specific language governing permissions and
14aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// limitations under the License.
15aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//
161c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan
1739910dcd1d68987ccee7c3031dc269233a8490bbAlex Deymo#ifndef UPDATE_ENGINE_COMMON_CONSTANTS_H_
1839910dcd1d68987ccee7c3031dc269233a8490bbAlex Deymo#define UPDATE_ENGINE_COMMON_CONSTANTS_H_
191c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan
201c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasannamespace chromeos_update_engine {
211c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan
22aa18e1641879f2df5993c2b02eb6f50d4443a649Chris Sosa// Directory for AU prefs that are preserved across powerwash.
23dd132f39cced9028c01e98895a4f6c5fb9553de1Alex Deymoextern const char kPowerwashSafePrefsSubDirectory[];
24aa18e1641879f2df5993c2b02eb6f50d4443a649Chris Sosa
25aa18e1641879f2df5993c2b02eb6f50d4443a649Chris Sosa// The location where we store the AU preferences (state etc).
26dd132f39cced9028c01e98895a4f6c5fb9553de1Alex Deymoextern const char kPrefsSubDirectory[];
27aa18e1641879f2df5993c2b02eb6f50d4443a649Chris Sosa
28390efedcb7e17587da765b6d682077cb7fa46ee1Alex Deymo// Path to the post install command, relative to the partition.
29390efedcb7e17587da765b6d682077cb7fa46ee1Alex Deymoextern const char kPostinstallDefaultScript[];
30390efedcb7e17587da765b6d682077cb7fa46ee1Alex Deymo
31be45bef9e283188b00e7def8967f81843669a7f1Chris Sosa// Path to the stateful partition on the root filesystem.
32be45bef9e283188b00e7def8967f81843669a7f1Chris Sosaextern const char kStatefulPartition[];
33be45bef9e283188b00e7def8967f81843669a7f1Chris Sosa
34d29695df35b7192faef4009d42a62c37bdd90a8fJay Srinivasan// Constants related to preferences.
354e1d1495c034c8a81c989622481b6cdf94a50c3cDavid Zeuthenextern const char kPrefsAttemptInProgress[];
36d29695df35b7192faef4009d42a62c37bdd90a8fJay Srinivasanextern const char kPrefsBackoffExpiryTime[];
37dd132f39cced9028c01e98895a4f6c5fb9553de1Alex Deymoextern const char kPrefsBootId[];
3819409b74019d787100b768306e75ab3e5882898dJay Srinivasanextern const char kPrefsCurrentBytesDownloaded[];
39d29695df35b7192faef4009d42a62c37bdd90a8fJay Srinivasanextern const char kPrefsCurrentResponseSignature[];
40d29695df35b7192faef4009d42a62c37bdd90a8fJay Srinivasanextern const char kPrefsCurrentUrlFailureCount[];
41d29695df35b7192faef4009d42a62c37bdd90a8fJay Srinivasanextern const char kPrefsCurrentUrlIndex[];
42985b112a749ccbe025ea4aa0245b13f92c28a057David Zeuthenextern const char kPrefsDailyMetricsLastReportedAt[];
43d29695df35b7192faef4009d42a62c37bdd90a8fJay Srinivasanextern const char kPrefsDeltaUpdateFailures[];
44820cc706c5ef60a3be96f5487f616bfed2b1d207Alex Deymoextern const char kPrefsFullPayloadAttemptNumber[];
45639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthenextern const char kPrefsInstallDateDays[];
46d29695df35b7192faef4009d42a62c37bdd90a8fJay Srinivasanextern const char kPrefsLastActivePingDay[];
47d29695df35b7192faef4009d42a62c37bdd90a8fJay Srinivasanextern const char kPrefsLastRollCallPingDay[];
48d29695df35b7192faef4009d42a62c37bdd90a8fJay Srinivasanextern const char kPrefsManifestMetadataSize[];
49f25eb491ff60f21659a7e2b230ee1c83957034c7Alex Deymoextern const char kPrefsManifestSignatureSize[];
5033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kPrefsMetricsAttemptLastReportingTime[];
5133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kPrefsMetricsCheckLastReportingTime[];
52be45bef9e283188b00e7def8967f81843669a7f1Chris Sosaextern const char kPrefsNumReboots[];
53a573d6fd046dc203b96bff6df8e57b35319906fdDavid Zeuthenextern const char kPrefsNumResponsesSeen[];
548e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymoextern const char kPrefsOmahaCohort[];
558e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymoextern const char kPrefsOmahaCohortHint[];
568e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymoextern const char kPrefsOmahaCohortName[];
57b3fa53bf760bd0a6fd1ef9df28cb425586d733f6Alex Deymoextern const char kPrefsOmahaEolStatus[];
5827a48bc3f2531166370c214f7a21e17fb1fc7af1David Zeuthenextern const char kPrefsP2PEnabled[];
59639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthenextern const char kPrefsP2PFirstAttemptTimestamp[];
60639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthenextern const char kPrefsP2PNumAttempts[];
61d29695df35b7192faef4009d42a62c37bdd90a8fJay Srinivasanextern const char kPrefsPayloadAttemptNumber[];
62d29695df35b7192faef4009d42a62c37bdd90a8fJay Srinivasanextern const char kPrefsPreviousVersion[];
63d29695df35b7192faef4009d42a62c37bdd90a8fJay Srinivasanextern const char kPrefsResumedUpdateFailures[];
64aa18e1641879f2df5993c2b02eb6f50d4443a649Chris Sosaextern const char kPrefsRollbackVersion[];
65856166594771c61973856f563e622ccb7dd48aa1Alex Deymoextern const char kPrefsChannelOnSlotPrefix[];
66e4c58bf01b6ccc915c6b261007dbb75241ed69b8David Zeuthenextern const char kPrefsSystemUpdatedMarker[];
674243291a6655972fe89d4747a0089834c9e47c20Alex Deymoextern const char kPrefsTargetVersionAttempt[];
684243291a6655972fe89d4747a0089834c9e47c20Alex Deymoextern const char kPrefsTargetVersionInstalledFrom[];
694243291a6655972fe89d4747a0089834c9e47c20Alex Deymoextern const char kPrefsTargetVersionUniqueId[];
7019409b74019d787100b768306e75ab3e5882898dJay Srinivasanextern const char kPrefsTotalBytesDownloaded[];
71d29695df35b7192faef4009d42a62c37bdd90a8fJay Srinivasanextern const char kPrefsUpdateCheckCount[];
72d29695df35b7192faef4009d42a62c37bdd90a8fJay Srinivasanextern const char kPrefsUpdateCheckResponseHash[];
73906191f88cb2448691e54f7a6a3b464854053154Alex Deymoextern const char kPrefsUpdateCompletedBootTime[];
74906191f88cb2448691e54f7a6a3b464854053154Alex Deymoextern const char kPrefsUpdateCompletedOnBootId[];
75cc6f99600b3354cfe3a0d212241e1ee1dc3421b6David Zeuthenextern const char kPrefsUpdateDurationUptime[];
76d29695df35b7192faef4009d42a62c37bdd90a8fJay Srinivasanextern const char kPrefsUpdateFirstSeenAt[];
77f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymoextern const char kPrefsUpdateOverCellularPermission[];
78d29695df35b7192faef4009d42a62c37bdd90a8fJay Srinivasanextern const char kPrefsUpdateServerCertificate[];
7941996ad21f29f825dfa7d61f12a3fad7319bf36dDavid Zeuthenextern const char kPrefsUpdateStateNextDataLength[];
80639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthenextern const char kPrefsUpdateStateNextDataOffset[];
81d29695df35b7192faef4009d42a62c37bdd90a8fJay Srinivasanextern const char kPrefsUpdateStateNextOperation[];
820affc2c099fac47b999ba39f8f1bacb418e65a97Sen Jiangextern const char kPrefsUpdateStatePayloadIndex[];
83d29695df35b7192faef4009d42a62c37bdd90a8fJay Srinivasanextern const char kPrefsUpdateStateSHA256Context[];
84d29695df35b7192faef4009d42a62c37bdd90a8fJay Srinivasanextern const char kPrefsUpdateStateSignatureBlob[];
85d29695df35b7192faef4009d42a62c37bdd90a8fJay Srinivasanextern const char kPrefsUpdateStateSignedSHA256Context[];
869a017f2c5ae41c04a7c7c15b5dbd08faadae7606David Zeuthenextern const char kPrefsUpdateTimestampStart[];
87cc6f99600b3354cfe3a0d212241e1ee1dc3421b6David Zeuthenextern const char kPrefsUrlSwitchCount[];
88cc6f99600b3354cfe3a0d212241e1ee1dc3421b6David Zeuthenextern const char kPrefsWallClockWaitPeriod[];
89d29695df35b7192faef4009d42a62c37bdd90a8fJay Srinivasan
9098e691cc6debda3ef671acba001bebd45da36377Alex Deymo// Keys used when storing and loading payload properties.
9198e691cc6debda3ef671acba001bebd45da36377Alex Deymoextern const char kPayloadPropertyFileSize[];
9298e691cc6debda3ef671acba001bebd45da36377Alex Deymoextern const char kPayloadPropertyFileHash[];
9398e691cc6debda3ef671acba001bebd45da36377Alex Deymoextern const char kPayloadPropertyMetadataSize[];
9498e691cc6debda3ef671acba001bebd45da36377Alex Deymoextern const char kPayloadPropertyMetadataHash[];
95fdd6dec9c4be2fbd667cf874c4cc6f4ffecaeef9Alex Deymoextern const char kPayloadPropertyAuthorization[];
96fdd6dec9c4be2fbd667cf874c4cc6f4ffecaeef9Alex Deymoextern const char kPayloadPropertyUserAgent[];
97fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymoextern const char kPayloadPropertyPowerwash[];
9887792ea818a63f2d246bbba2b7429b85ee8d669fAlex Deymoextern const char kPayloadPropertyNetworkId[];
9998e691cc6debda3ef671acba001bebd45da36377Alex Deymo
10019409b74019d787100b768306e75ab3e5882898dJay Srinivasan// A download source is any combination of protocol and server (that's of
10119409b74019d787100b768306e75ab3e5882898dJay Srinivasan// interest to us when looking at UMA metrics) using which we may download
10219409b74019d787100b768306e75ab3e5882898dJay Srinivasan// the payload.
10319409b74019d787100b768306e75ab3e5882898dJay Srinivasantypedef enum {
104d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko  kDownloadSourceHttpsServer,  // UMA Binary representation: 0001
105d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko  kDownloadSourceHttpServer,   // UMA Binary representation: 0010
106d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko  kDownloadSourceHttpPeer,     // UMA Binary representation: 0100
10719409b74019d787100b768306e75ab3e5882898dJay Srinivasan
10819409b74019d787100b768306e75ab3e5882898dJay Srinivasan  // Note: Add new sources only above this line.
10919409b74019d787100b768306e75ab3e5882898dJay Srinivasan  kNumDownloadSources
11019409b74019d787100b768306e75ab3e5882898dJay Srinivasan} DownloadSource;
11119409b74019d787100b768306e75ab3e5882898dJay Srinivasan
1121c656c48886cf5054b526ed7e95b05903d7644dbAlex Deymo// A payload can be a Full or Delta payload. In some cases, a Full payload is
1131c656c48886cf5054b526ed7e95b05903d7644dbAlex Deymo// used even when a Delta payload was available for the update, called here
1141c656c48886cf5054b526ed7e95b05903d7644dbAlex Deymo// ForcedFull. The PayloadType enum is only used to send UMA metrics about the
1151c656c48886cf5054b526ed7e95b05903d7644dbAlex Deymo// successfully applied payload.
1161c656c48886cf5054b526ed7e95b05903d7644dbAlex Deymotypedef enum {
1171c656c48886cf5054b526ed7e95b05903d7644dbAlex Deymo  kPayloadTypeFull,
1181c656c48886cf5054b526ed7e95b05903d7644dbAlex Deymo  kPayloadTypeDelta,
1191c656c48886cf5054b526ed7e95b05903d7644dbAlex Deymo  kPayloadTypeForcedFull,
1201c656c48886cf5054b526ed7e95b05903d7644dbAlex Deymo
1211c656c48886cf5054b526ed7e95b05903d7644dbAlex Deymo  // Note: Add new payload types only above this line.
1221c656c48886cf5054b526ed7e95b05903d7644dbAlex Deymo  kNumPayloadTypes
1231c656c48886cf5054b526ed7e95b05903d7644dbAlex Deymo} PayloadType;
1241c656c48886cf5054b526ed7e95b05903d7644dbAlex Deymo
1258f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen// Maximum number of times we'll allow using p2p for the same update payload.
126dcba8098a905018e6fe2e8e4e3b121a255f0d99eDavid Zeuthenconst int kMaxP2PAttempts = 10;
127dcba8098a905018e6fe2e8e4e3b121a255f0d99eDavid Zeuthen
1288f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen// Maximum wallclock time we allow attempting to update using p2p for
129472b205c8afdb22ba22ba12ece667263b0e4fb99David Zeuthen// the same update payload - five days.
130472b205c8afdb22ba22ba12ece667263b0e4fb99David Zeuthenconst int kMaxP2PAttemptTimeSeconds = 5 * 24 * 60 * 60;
1318f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen
1328f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen// The maximum amount of time to spend waiting for p2p-client(1) to
1338f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen// return while waiting in line to use the LAN - six hours.
1348f191b22a1a1ab2b803d65ee488729206e648695David Zeuthenconst int kMaxP2PNetworkWaitTimeSeconds = 6 * 60 * 60;
135dcba8098a905018e6fe2e8e4e3b121a255f0d99eDavid Zeuthen
136526cb58ddecbbc1ba5d2e3faf068d26d0661d464David Zeuthen// The maximum number of payload files to keep in /var/cache/p2p.
137526cb58ddecbbc1ba5d2e3faf068d26d0661d464David Zeuthenconst int kMaxP2PFilesToKeep = 3;
138526cb58ddecbbc1ba5d2e3faf068d26d0661d464David Zeuthen
13941f2cf52137dd94ef9115e27ec8729a126edb0ffDavid Zeuthen// The maximum number of days to keep a p2p file;
14041f2cf52137dd94ef9115e27ec8729a126edb0ffDavid Zeuthenconst int kMaxP2PFileAgeDays = 5;
14141f2cf52137dd94ef9115e27ec8729a126edb0ffDavid Zeuthen
14219409b74019d787100b768306e75ab3e5882898dJay Srinivasan// The default number of UMA buckets for metrics.
14319409b74019d787100b768306e75ab3e5882898dJay Srinivasanconst int kNumDefaultUmaBuckets = 50;
14419409b74019d787100b768306e75ab3e5882898dJay Srinivasan
14519409b74019d787100b768306e75ab3e5882898dJay Srinivasan// General constants
14619409b74019d787100b768306e75ab3e5882898dJay Srinivasanconst int kNumBytesInOneMiB = 1024 * 1024;
14719409b74019d787100b768306e75ab3e5882898dJay Srinivasan
14834135a9f24c72137aa85378b57e7698162c687f2David Zeuthen// Number of redirects allowed when downloading.
14934135a9f24c72137aa85378b57e7698162c687f2David Zeuthenconst int kDownloadMaxRedirects = 10;
15034135a9f24c72137aa85378b57e7698162c687f2David Zeuthen
151a641be56452b67449e03444f1a08007f74638a70David Zeuthen// The minimum average speed that downloads must sustain...
15234135a9f24c72137aa85378b57e7698162c687f2David Zeuthen//
15334135a9f24c72137aa85378b57e7698162c687f2David Zeuthen// This is set low because some devices may have very poor
154072359ca138504065e1e0c1189eb38c09576d324Alex Vakulenko// connectivity and we want to make as much forward progress as
155a641be56452b67449e03444f1a08007f74638a70David Zeuthen// possible. For p2p this is high (25 kB/second) since we can assume
15634135a9f24c72137aa85378b57e7698162c687f2David Zeuthen// high bandwidth (same LAN) and we want to fail fast.
15734135a9f24c72137aa85378b57e7698162c687f2David Zeuthenconst int kDownloadLowSpeedLimitBps = 1;
158a641be56452b67449e03444f1a08007f74638a70David Zeuthenconst int kDownloadP2PLowSpeedLimitBps = 25 * 1000;
15934135a9f24c72137aa85378b57e7698162c687f2David Zeuthen
16034135a9f24c72137aa85378b57e7698162c687f2David Zeuthen// ... measured over this period.
16134135a9f24c72137aa85378b57e7698162c687f2David Zeuthen//
16234135a9f24c72137aa85378b57e7698162c687f2David Zeuthen// For non-official builds (e.g. typically built on a developer's
16334135a9f24c72137aa85378b57e7698162c687f2David Zeuthen// workstation and served via devserver) bump this since it takes time
16434135a9f24c72137aa85378b57e7698162c687f2David Zeuthen// for the workstation to generate the payload. For p2p, make this
16534135a9f24c72137aa85378b57e7698162c687f2David Zeuthen// relatively low since we want to fail fast.
16634135a9f24c72137aa85378b57e7698162c687f2David Zeuthenconst int kDownloadLowSpeedTimeSeconds = 90;
16734135a9f24c72137aa85378b57e7698162c687f2David Zeuthenconst int kDownloadDevModeLowSpeedTimeSeconds = 180;
168a641be56452b67449e03444f1a08007f74638a70David Zeuthenconst int kDownloadP2PLowSpeedTimeSeconds = 60;
16934135a9f24c72137aa85378b57e7698162c687f2David Zeuthen
17034135a9f24c72137aa85378b57e7698162c687f2David Zeuthen// The maximum amount of HTTP server reconnect attempts.
17134135a9f24c72137aa85378b57e7698162c687f2David Zeuthen//
17234135a9f24c72137aa85378b57e7698162c687f2David Zeuthen// This is set high in order to maximize the attempt's chance of
17334135a9f24c72137aa85378b57e7698162c687f2David Zeuthen// succeeding. When using p2p, this is low in order to fail fast.
17434135a9f24c72137aa85378b57e7698162c687f2David Zeuthenconst int kDownloadMaxRetryCount = 20;
17534135a9f24c72137aa85378b57e7698162c687f2David Zeuthenconst int kDownloadMaxRetryCountOobeNotComplete = 3;
176a641be56452b67449e03444f1a08007f74638a70David Zeuthenconst int kDownloadP2PMaxRetryCount = 5;
17734135a9f24c72137aa85378b57e7698162c687f2David Zeuthen
17834135a9f24c72137aa85378b57e7698162c687f2David Zeuthen// The connect timeout, in seconds.
17934135a9f24c72137aa85378b57e7698162c687f2David Zeuthen//
18034135a9f24c72137aa85378b57e7698162c687f2David Zeuthen// This is set high because some devices may have very poor
18134135a9f24c72137aa85378b57e7698162c687f2David Zeuthen// connectivity and we may be using HTTPS which involves complicated
18234135a9f24c72137aa85378b57e7698162c687f2David Zeuthen// multi-roundtrip setup. For p2p, this is set low because we can
18334135a9f24c72137aa85378b57e7698162c687f2David Zeuthen// the server is on the same LAN and we want to fail fast.
18434135a9f24c72137aa85378b57e7698162c687f2David Zeuthenconst int kDownloadConnectTimeoutSeconds = 30;
18534135a9f24c72137aa85378b57e7698162c687f2David Zeuthenconst int kDownloadP2PConnectTimeoutSeconds = 5;
18634135a9f24c72137aa85378b57e7698162c687f2David Zeuthen
1871c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan}  // namespace chromeos_update_engine
1881c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan
18939910dcd1d68987ccee7c3031dc269233a8490bbAlex Deymo#endif  // UPDATE_ENGINE_COMMON_CONSTANTS_H_
190