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