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